May*_*day 4 java java-8 java-stream
我试图找到最快的方法,而不是通过Java SE 8 Streams进行联合/排除/交叉操作的复杂方法.
我这样做:
Stream<String> fruitStream = Stream.of("apple", "banana", "pear", "kiwi", "orange");
Stream<String> fruitStream2 = Stream.of("orange", "kiwi", "melon", "apple", "watermelon");
//Trying to create exclude operation
fruitStream.filter(
item -> !fruitStream2.anyMatch(item2 -> item2.equals(item)))
.forEach(System.out::println);
// Expected result: fruitStream - fruitStream2: ["banana","pear"]
Run Code Online (Sandbox Code Playgroud)
我得到以下例外:
java.lang.IllegalStateException:stream已经被操作或关闭
如果我能够做这个操作,我可以开发自己所有其余的,联合,交集等...
所以,2分是:
1)我在这个解决方案中做错了什么?
2)是否有一种不太复杂的方式在两个流之间执行操作?
注意
我想用流来学习它们.不想将它们转换为数组或列表
第一次item -> !fruitStream2.anyMatch(item2 -> item2.equals(item))执行,它消耗fruitStream2.fruitStream2不能再次使用来过滤第二项fruitStream1.
而不是使用第二个流,为什么不创建Set和使用contains?
Set<String> otherFruits = new HashSet<>(); // Add the fruits.
fruitStream.filter(f -> !otherFruits.contains(f)).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |