使用Java8匹配方法比较两个列表
使用Java8匹配方法,我能够比较两个列表,并在两个列表中都有匹配项时获得布尔结果 请找到我下面的代码使用Java8匹配方法比较两个列表,java,java-8,java-stream,Java,Java 8,Java Stream,使用Java8匹配方法,我能够比较两个列表,并在两个列表中都有匹配项时获得布尔结果 请找到我下面的代码 public class StreamTest2 { public static void main(String args[]) { List<Integer> aList = Arrays.asList( new Integer[] { 1,3,5,6,8 }); List<In
public class StreamTest2 {
public static void main(String args[]) {
List<Integer> aList = Arrays.asList( new Integer[] {
1,3,5,6,8
});
List<Integer> bList = Arrays.asList( new Integer[] {
10, 89, 8, 9
});
//If any number in List1 present in List2
System.out.println("If any number present in aList is present in bList : "+aList.stream().anyMatch(num -> bList.contains(num)));
}
}
但是,我想从两个列表中打印匹配的号码,如何打印匹配的号码?您可以使用
过滤器和findFirst
:
System.out.println("If any number present in aList is present in bList : "+aList.stream().filter(num -> bList.contains(num)).findFirst().orElse(null));
System.out.println("If any number present in aList is present in bList : "+aList.stream().filter(num -> bList.contains(num)).collect(Collectors.toList());
如果找到匹配号,则打印匹配号(在第一次匹配时停止),如果未找到匹配号,则打印null
或者,您可以将所有匹配项收集到列表中
:
System.out.println("If any number present in aList is present in bList : "+aList.stream().filter(num -> bList.contains(num)).findFirst().orElse(null));
System.out.println("If any number present in aList is present in bList : "+aList.stream().filter(num -> bList.contains(num)).collect(Collectors.toList());
试试这个
aList.stream().filter(bList::contains).collect(Collectors.toSet());
调用retainal
时会得到java.lang.UnsupportedOperationException
的原因是Arrays\asList
返回一个由固定大小数组支持的ArrayList。任何删除或向这些列表中添加元素的尝试都将导致上述不支持操作异常
正如@LuCio所建议的,解决方案是用ArraysList构造函数调用包装Arrays.asList
部分,如下所示:
List<Integer> aList = new ArrayList(Arrays.asList(1,3,5,6,8));
List<Integer> bList = new ArrayList(Arrays.asList(10, 89, 8, 9));
请记住,这将修改原始的aList
列表。如果需要保留aList
的状态,我建议在调用retainal
之前复制aList
。在这种情况下,建议使用的流API之一可能更合适。Perfect,它的工作方式与您的说明一致。但是,如果有多个匹配项,这意味着我们可以打印所有匹配项。@Karthikeyan不是用.findFirst()
终止流管道,而是将其收集到一个列表(.collect(collector.toList()
)中,该列表将包含所有匹配项。为什么不使用Collectors.toSet()?@HadiWhy不仅仅是列表.retainal(bList)
?@LuCio-它在线程“main”java.lang.UnsupportedOperationException中抛出异常
异常,但这仅仅是因为您使用的是Arrays.asList(…)
。初始化列表就像新建ArrayList(Arrays.asList(1,3,5,6,8));