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