简体   繁体   English

Java 8流过滤:IN子句

[英]Java 8 stream filtering: IN clause

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

How to simulate a tipical IN clause (like in mysql or JPA) using a Predicate ? 如何使用谓词模拟一个典型的IN子句(如在mysql或JPA中)?

I decided to update my comment to an answer. 我决定将我的评论更新为答案。 The lambda expression for your requested Predicate<Y> (where Y should be a concrete type) looks as following: 您请求的Predicate<Y> (其中Y应该是具体类型)的lambda表达式如下所示:

element -> tmp.contains(element)

Because the collection's contains method has the same signature as the predicate's test method, you can use a method reference (here an instance method reference): 因为集合的contains方法与谓词的test方法具有相同的签名,所以您可以使用方法引用 (这里是实例方法引用):

tmp::contains

A full example: 一个完整的例子:

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);

This prints 这打印

[1, 2, 3]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM