List<Y> tmp= new DATA<Y>().findEntities();
List<X> tmp1 = new DATA<X>().findEntities().stream().filter(
IN (tmp) ???
).collect(Collectors.toList());
如何使用谓词模拟一个典型的IN子句(如在mysql或JPA中)?Java 8流过滤:IN子句
List<Y> tmp= new DATA<Y>().findEntities();
List<X> tmp1 = new DATA<X>().findEntities().stream().filter(
IN (tmp) ???
).collect(Collectors.toList());
如何使用谓词模拟一个典型的IN子句(如在mysql或JPA中)?Java 8流过滤:IN子句
我决定将我的评论更新为答案。为您的要求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]
这会生成一个可疑的调用java.util.Collection.contains(有时) – 2014-10-02 13:39:18
我没有得到一个_suspicious调用_也没有编译器警告。我只是得到了描述的输出。 – Seelenvirtuose 2014-10-02 13:41:51
谢谢你的帮助。 – 2014-10-02 13:42:23
'tmp.contains(实体)'其中'tmp'是一个'HashSet'。 – 2014-10-02 13:25:01
'tmp :: contains'(方法参考) – Seelenvirtuose 2014-10-02 13:26:10
我可以有Predicate(Implemented)例子吗? – 2014-10-02 13:31:28