我有一个像这样的字符串数组:
firstArray = {"1", "2", "3", "4" };
我有第二个这样的数组:
secondArray = {"2", "5", "6", "7" };
如果我想用一个元素流,我可以这样做:
firstArray.stream()
.filter(element -> !element.equals("2"))
.forEach((element) -> {
finalArrayList.add(element);
}
);
如何在第一个数组中使用第二个数组流式传输java 8中的所有元素?
答案 0 :(得分:3)
如果您想使用Stream API
仅保留第二个数组中没有的第一个数组的元素,您可以这样做:
List<String> result = Arrays.stream(firstArray)
.filter(el -> Arrays.stream(secondArray).noneMatch(el::equals))
.collect(Collectors.toList());
答案 1 :(得分:0)
你到底想做什么?获取第一个数组中同样存在于第二个数组中的所有元素吗?
像这样:
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));
}