Java Stream,需要更新列表对象列表

问题描述 投票:0回答:1

测试.java

  private String Names;
  private List<InnerList> innerlist = new ArrayList<InnerList>();

InnertList.java

  private String id;
  private Long x;
  private Long y;
[class Test {
    Name: test
    innerlist: [class Innerlist{
        id: 1
        x: 0
        y: 0
    }]
}]

我有以下清单:

List<Test> list = new ArrayList<Test>();

现在,我需要根据两个条件更新 x 或 y:如果 Name 与“Test”匹配并且 id 与 1 匹配。

我尝试编写,但我不确定如何使用设置器更新 x/y。我需要过滤它两次,但不知道如何在

getInnerList
时设置条件,因为条件位于内部列表的变量上。

list.stream().filter(u->u.getName().equals("Test")).filter(t1->t1.getInnerList());
java java-8 java-stream
1个回答
0
投票

.filter(t1->t1.getInnerList())
部分实际上没有意义,因为
.filter(...)
期望谓词作为参数,即以布尔值作为返回值的 lambda。我不是 100% 确定你想要实现什么,但我认为这会解决你的问题:

list.stream()
  .filter(u -> "Test".equals(u.getName()))
  .flatMap(u -> u.getInnerList().stream())
  .filter(i -> i.getId() == 1)
  .forEach(i -> {
    // write your setters on `i` here
  }
)

这里使用 Stream::flatMap,我们获得了满足先前过滤器的列表元素的 innerList 元素流。

© www.soinside.com 2019 - 2024. All rights reserved.