Java 8流过滤:IN子句

O_T*_*O_T 4 java lambda

List<Y> tmp= new DATA<Y>().findEntities();
List<X> tmp1 = new DATA<X>().findEntities().stream().filter(
                        IN (tmp) ???
                ).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

如何使用谓词模拟一个典型的IN子句(如在mysql或JPA中)?

See*_*ose 5

我决定将我的评论更新为答案.您请求的lambda表达式Predicate<Y>(其中Y应该是具体类型)如下所示:

element -> tmp.contains(element)
Run Code Online (Sandbox Code Playgroud)

因为集合的contains方法与谓词的方法具有相同的签名,所以test您可以使用方法引用(这里是实例方法引用):

tmp::contains
Run Code Online (Sandbox Code Playgroud)

一个完整的例子:

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);
Run Code Online (Sandbox Code Playgroud)

这打印

[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)