我是 Java 流和函数式编程的新手,我想知道我的问题是否有一个有效的用例,或者它只是没有意义。我有以下代码,它从数组中提供了一个集合
public static void main(String[] args) {
String []arr = {"a","abc","b","cd"};
Set<String> dict = new HashSet<>();
Arrays.stream(arr).map(item->{
System.out.println(item);
dict.add(item);
return dict;
});
// dict = Arrays.stream(arr).collect(Collectors.toSet());
System.out.println(dict);
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个空的字典。如果我按照倒数第二行的方式去做,它就会起作用。有没有一种方法可以改变已经实例化的dict流外部实例化的数据,使其填充到函数中map?
Stream.map()是一个中间操作,这意味着它只执行管道的一个步骤,但当您调用它时它不会执行任何操作。您需要终端操作才能使流正常工作。对于您的情况,您可以使用forEachOrdered():
Arrays.stream(arr)
.peek(System.out::println)
.forEachOrdered(dict::add);
Run Code Online (Sandbox Code Playgroud)
注意:我假设您需要修改现有集合而不是生成新集合是有原因的。否则,只需collect()按照其他答案中的建议使用即可。