List<Y> tmp= new DATA<Y>().findEntities();
List<X> tmp1 = new DATA<X>().findEntities().stream().filter(
IN (tmp) ???
).collect(Collectors.toList());
如何使用谓词模拟典型的IN子句(如在mysql或JPA中)?
答案 0 :(得分:5)
我决定将我的评论更新为答案。您请求的Predicate<Y>
(其中Y应该是具体类型)的lambda表达式如下所示:
element -> tmp.contains(element)
由于集合contains
方法与谓词的test
方法具有相同的签名,因此您可以使用方法参考(此处为实例方法参考):
tmp::contains
一个完整的例子:
List<Number> tmp = Arrays.asList(1, 2, 3);
List<Integer> tmp1 = Arrays
.stream(new Integer[] { 1, 2, 3, 4, 5 })
.filter(tmp::contains)
.collect(Collectors.toList());
System.out.println(tmp1);
打印
[1, 2, 3]