3 回答

TA貢獻1725條經驗 獲得超8個贊
如果位置不重要,而您使用Set
它,那么這將變得非常微不足道:
set1.retainAll(set2); set1.retainAll(set3);
使用流你可以這樣做:
set1.stream() .filter(set2::contains) .filter(set3::contains) .collect(Collectors.toList());

TA貢獻1864條經驗 獲得超2個贊
你可以這樣做:
Set<Integer> set1 = new HashSet<>(list1); IntStream.range(0, Math.min(list2.size(), list3.size())) .filter(i -> Objects.equals(list2.get(i), list3.get(i))) // check where index have the same value .mapToObj(list2::get) // get the value (as the values are equal could be also list3) .filter(set1::contains) // check if list1 contains the value .forEach(System.out::println);
輸出
3
轉換list1
為集合 ( set1
) 通過提高包含查詢 ( ) 的性能,可以顯著提高速度O(n) -> O(1)
。

TA貢獻1752條經驗 獲得超4個贊
由于第一個元素的索引List并不重要,因此您可以Stream遍歷元素list1并搜索同時list1出現(xiàn)在同一索引處的元素:list2list3
Optional<Integer> result =
list1.stream()
.filter(IntStream.range(0,list2.size())
.filter(i -> list2.get(i).equals(list3.get(i)))
.mapToObj(list2::get)
.collect(Collectors.toSet())::contains)
.findFirst();
或者,如果您只想打印第一個匹配項:
list1.stream()
.filter(IntStream.range(0,list2.size())
.filter(i -> list2.get(i).equals(list3.get(i)))
.mapToObj(list2::get)
.collect(Collectors.toSet())::contains)
.limit(1)
.forEach(System.out::println);
管道IntStream生成同時出現(xiàn)在同一索引中Set的所有元素。搜索that的元素屬于 that 。list2list3filterlist1Set
添加回答
舉報