代码之家  ›  专栏  ›  技术社区  ›  user6248190

如何在Java8中使用filter忽略int数组中的值和集合中的值

  •  4
  • user6248190  · 技术社区  · 7 年前

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

    int[] ignoredErrorCodes = {400, 500};
    
      List<Error> errorCodes = errorsList.stream()
                .filter(error -> error.getErrorCode() != ignoredErrorCodes[0])
                .collect(Collectors.toList());
    

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

    2 回复  |  直到 7 年前
        1
  •  7
  •   Eran    7 年前

    最好将ignoreds代码存储在 Set

    Set<Integer> ignored = Set.of(400,500);
    List<Error> errorCodes = errorsList.stream()
                .filter(error -> !ignored.contains(error.getErrorCode()))
                .collect(Collectors.toList());
    
        2
  •  0
  •   daniu    7 年前

    @Eran可能是对的,一个集合可能最能传达你的意图。但是,如果确实要使用数组,请考虑:

    import java.util.Arrays
    
    errorsList.stream()
            .filter(error -> Arrays.binarySearch(ignoredErrorCodes, error.getCode()) < 0)
            .collect(Collectors.toList());