繁体   English   中英

用另一个所有数组元素过滤数组-Java 8

[英]filter array with another all array elements - Java 8

我有一个像这样的字符串数组:

firstArray = {"1", "2", "3", "4" };

我有这样的第二个数组:

secondArray = {"2", "5", "6", "7" };

如果我想流一个元素,我可以这样做:

firstArray.stream()
    .filter(element -> !element.equals("2"))
    .forEach((element) -> {
        finalArrayList.add(element);
    }
);

我如何在Java 8中流式传输第一个数组和第二个数组的所有元素?

如果要使用Stream API仅将第一个数组中没有的元素保留在第二个数组中,则可以这样进行:

List<String> result = Arrays.stream(firstArray)
    .filter(el -> Arrays.stream(secondArray).noneMatch(el::equals))
    .collect(Collectors.toList());

您到底想做什么? 获取第二个数组中也存在的第一个数组中的所有元素?

像这样:

String[] firstArray = {"1", "2", "3", "4"};
String[] secondArray = {"2", "5", "6", "7"};

List<String> finalArrayList = Arrays.stream(firstArray)
        .filter(element -> arrayContains(secondArray, element))
        .collect(Collectors.toList());

使用以下实用程序方法:

public static <T> boolean arrayContains(T[] array, T element) {
    return Arrays.stream(array)
                 .filter(e -> e.equals(element))
                 .findFirst().isPresent();
}

注意:不要使用forEach并将结果添加到finalArrayList ,而应使用收集器。 从功能编程的角度来看,这是更纯粹的。

编辑 -具有Holger的技巧(请参阅下面的评论):

public static <T> boolean arrayContains(T[] array, T element) {
    return Arrays.stream(array)
                 .anyMatch(e -> e.equals(element));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM