Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8 在filter方法中使用Java流添加到列表 Map map1=newhashmap(); map1.put(1,true); map1.put(2,true); map1.put(3,false); map1.put(4,true); map1.put(5,false); Map map2=新的HashMap(); map2.put(1,1); map2.put(2,2); map2.put(3,3); map2.put(4,4); map2.put(5,5); List valids=new ArrayList(); map2.values().stream().filter(value->map1.get(value)?valids.add(account):false);_Java 8_Java Stream - Fatal编程技术网

Java 8 在filter方法中使用Java流添加到列表 Map map1=newhashmap(); map1.put(1,true); map1.put(2,true); map1.put(3,false); map1.put(4,true); map1.put(5,false); Map map2=新的HashMap(); map2.put(1,1); map2.put(2,2); map2.put(3,3); map2.put(4,4); map2.put(5,5); List valids=new ArrayList(); map2.values().stream().filter(value->map1.get(value)?valids.add(account):false);

Java 8 在filter方法中使用Java流添加到列表 Map map1=newhashmap(); map1.put(1,true); map1.put(2,true); map1.put(3,false); map1.put(4,true); map1.put(5,false); Map map2=新的HashMap(); map2.put(1,1); map2.put(2,2); map2.put(3,3); map2.put(4,4); map2.put(5,5); List valids=new ArrayList(); map2.values().stream().filter(value->map1.get(value)?valids.add(account):false);,java-8,java-stream,Java 8,Java Stream,当我试图输出列表valids的值时,它返回一个空列表。为什么会这样?执行流操作时,列表的引用是否更改 注意:我可以使用collect()方法添加到它。不要这样做 filter方法应该是filter流,而不是向其他列表添加内容。此外,您的流没有任何终端操作-这是一种错误的方法 如您所述,将其更改为使用collect。这样会更易于阅读和维护。您的代码是不正确的,因为使用filter将项目添加到列表中,这违背了filter的目的 您应该通过收集结果来终止filter管道。此处的流是开放的,因此无法将结

当我试图输出列表
valids
的值时,它返回一个空列表。为什么会这样?执行
操作时,列表的引用是否更改

注意:我可以使用
collect()
方法添加到它。

不要这样做

filter
方法应该是
filter
流,而不是向其他列表添加内容。此外,您的流没有任何终端操作-这是一种错误的方法


如您所述,将其更改为使用
collect
。这样会更易于阅读和维护。

您的代码是不正确的,因为使用
filter
将项目添加到列表中,这违背了
filter
的目的

您应该通过收集结果来终止
filter
管道。此处的流是开放的,因此无法将结果刷新到列表中

使用:

或者,如果您想使用这种方式,则通过收集器函数关闭流

map2.values().stream().filter(map1::get).forEach(trues::add);

不要那样做。一个filter函数应该用于过滤。没有副作用。了解流是如何工作的,正确和不正确的操作是什么。流上没有任何终端操作,因此最后一行是noop:没有任何内容被过滤。javadoc和数百个关于streams的教程都是你的朋友?trues.add(account):false与
map1.get(value)和&trues.add(account)
相同…
map2.values().stream().filter(map1::get).forEach(trues::add);
map2.values().stream().filter(value-> map1.get(value) ? trues1.add(value) : false).count();