Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.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
Java8流。除其他元素外的所有元素_Java_Java 8_Java Stream - Fatal编程技术网

Java8流。除其他元素外的所有元素

Java8流。除其他元素外的所有元素,java,java-8,java-stream,Java,Java 8,Java Stream,我感兴趣的是确定一种方法,它返回一个元素列表,不包括另一个列表中的元素 比如说 List<Integer> multiplesOfThree = ... // 3,6,9,12 etc List<Integer> evens = ... // 2,4,6,8 etc List<Integer> others = multiplesOfThree.except(evens) // should return a list of elements that are

我感兴趣的是确定一种方法,它返回一个元素列表,不包括另一个列表中的元素

比如说

List<Integer> multiplesOfThree = ... // 3,6,9,12 etc
List<Integer> evens = ... // 2,4,6,8 etc
List<Integer> others = multiplesOfThree.except(evens) // should return a list of elements that are not in the other list
您可以使用,传递一个
谓词
,以确保元素不存在于
evens

List<Integer> others = multiplesOfThree.stream()
        .filter(i -> !evens.contains(i))
        .collect(Collectors.toList());
你可以用

multipleOfThree.stream()
               .filter(((Predicate<Integer>) evens::contains).negate())

有几种解决办法

首先,不使用流,您只需创建一个新列表并从中删除另一个集合中的所有元素

final List<Integer> multiplesOfThree = Arrays.asList(3,6,9,12);
final List<Integer> evens = Arrays.asList(2,4,6,8,10,12);
final List<Integer> others1 = new ArrayList<>(multiplesOfThree);
others1.removeAll(evens);

removeAll是一个优秀的解决方案。
multipleOfThree.stream()
               .filter(((Predicate<Integer>) evens::contains).negate())
HashSet<Integer> evenSet = new HashSet<>(even);
multipleOfThree.stream()
               .filter(((Predicate<Integer>) evenSet::contains).negate())
final List<Integer> multiplesOfThree = Arrays.asList(3,6,9,12);
final List<Integer> evens = Arrays.asList(2,4,6,8,10,12);
final List<Integer> others1 = new ArrayList<>(multiplesOfThree);
others1.removeAll(evens);
final List<Integer> others2 = multiplesOfThree
     .stream()
     .filter(x -> !evens.contains(x))
     .collect(Collectors.toList());
final List<Integer> others3 = multiplesOfThree
    .stream()
    .filter(x -> x % 2 != 0)
    .collect(Collectors.toList());