Map<Integer, Boolean> map1= new HashMap<>();
map1.put(1, true);
map1.put(2, true);
map1.put(3, false);
map1.put(4, true);
map1.put(5, false);
Map<Integer, Integer> map2= new HashMap<>();
map2.put(1, 1);
map2.put(2, 2);
map2.put(3, 3);
map2.put(4, 4);
map2.put(5, 5);
List<Integer> trues = new ArrayList<>();
map2.values().stream().filter(value-> map1.get(value) ? trues.add(account) : false);
当我尝试输出列表'trues'的值时,它将返回一个空列表。为什么会这样呢?进行流操作时,列表的引用会更改吗?
注意:我可以使用'collect()'方法添加到其中。
答案 0 :(得分:1)
不要这样做。
应该使用filter
方法filter
流,而不是向其他列表添加内容。另外,您的流没有任何终端操作-这是错误的方法。
如前所述,将其更改为使用collect
。这样会更易于阅读和维护。
答案 1 :(得分:1)
您的代码不正确,因为使用filter
将项目添加到列表中会违反filter
的目的。
您应该通过收集结果来终止filter
管道。这里的流是Open,因此无法刷新结果到列表;
使用:
map2.values().stream().filter(map1::get).forEach(trues::add);
或者,如果您要使用这种方式,而不是使用收集器功能关闭流
map2.values().stream().filter(value-> map1.get(value) ? trues1.add(value) : false).count();