如何在Java 8中使用过滤器来忽略int数组和集合中的值

use*_*190 4 java arrays java-8 java-stream

我有一个errorCodes列表,我想检查它们是否包含单独数组中的错误代码.如果列表errorCode中存在错误代码,那么我想过滤掉那些错误代码.

这就是我到目前为止所拥有的

int[] ignoredErrorCodes = {400, 500};

  List<Error> errorCodes = errorsList.stream()
            .filter(error -> error.getErrorCode() != ignoredErrorCodes[0])
            .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

如何使用流检查数组ignoredErrorCodes中的所有值而不是一个?

Era*_*ran 7

最好将忽略的代码存储在一个Set更快的查找中:

Set<Integer> ignored = Set.of(400,500);
List<Error> errorCodes = errorsList.stream()
            .filter(error -> !ignored.contains(error.getErrorCode()))
            .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

  • @tobias_k`Set`*接口*没有说明实际的开销.对于OpenJDK,`Set.of(400,500)`返回的实现将是一个包含两个值的两个字段的类,其`contains`方法看起来像`boolean contains(Object o){return o.equals(e0) )|| o.equals(E1); }`.它会便宜些什么?关于这个解决方案的好处是,它将适应问题的大小,即切换到具有更多元素的基于散列的实现. (4认同)