[英]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.