原始碼閱讀之Sets
阿新 • • 發佈:2018-12-20
舉個栗子:
Set<Integer> set1 = Sets.newHashSet(1, 2, 3, 4, 5, 6); Set<Integer> set2 = Sets.newHashSet(5, 6, 7, 8, 9, 10); Set<Integer> setUnion = Sets.union(set1, set2);//返回兩個集合並集的不可修改檢視 setUnion.forEach(i -> log.info(i.toString())); log.info("-----------------"); Set<Integer> setInterSection = Sets.intersection(set1, set2);//返回兩個集合交集的不可修改檢視 setInterSection.forEach(i -> log.info(i.toString())); log.info("-----------------"); Set<Integer> setFilter1 = Sets.filter(set1, i -> i > 3); set1.add(0);set1.forEach(i -> log.info("?{}?",i.toString())); setFilter1.forEach(i -> log.info(i.toString()));//過濾器。函式式介面Predicate過濾。返回符合條件的元素,可以修改,需要注意的是,修改是修改原來的集合set1 log.info("--------"); Set<Integer> setFilter2 = Sets.filter(set2, i -> i > 8); setFilter2.forEach(i -> log.info(i.toString()));//過濾器。函式式介面Predicate過濾 log.info("-----------------"); Set<Integer> setDifference = Sets.difference(set1,set2);//返回兩個集合並集的不可修改檢視 setDifference.forEach(i -> log.info(i.toString()));
1.Sets.union(set1, set2);
方法寫了很多校驗,然後返回一個新ImmutableSet<E> 把兩個set 裝入,set自動去重 返回。
2.Sets.intersection(set1, set2);
用guava 的 Iterators.filter 方法過濾,把set2 做為函式式介面 Predicate 傳入,遍歷 set1 ,如果 set2 中不包括 set1 中的元素,則continue
3.Sets.filter(set1, i -> i > 3);
惰性模式,使用的時候用 Iterators.filter 方法過濾
4.Sets.difference(set1,set2);
與Sets.intersection(set1, set2);很類似,只不過傳入 Predicate ,是傳入 Predicates.not(Predicates.in(set2)); 就是 set2 的取非。
處理流程一樣。