一、集合排序
List接口新增默認方法sort
- 源碼
default void sort(Comparator<? super E> c) {
Object[] a = this.toArray();
Arrays.sort(a, (Comparator) c);
ListIterator<E> i = this.listIterator();
for (Object e : a) {
i.next();
i.set((E) e);
}
}
- 示例
Person p1 = new Person("東子",12);
Person p2 = new Person("東子",10);
Person p3 = new Person("東子",19);
Person p4 = new Person("東子",22);
List<Person> list = Arrays.asList(p1,p2,p3,p4);
list.sort((v1 ,v2) -> v1.getAge() - v2.getAge());
二、集合遍歷
Iterable 接口新增默認方法foreach
- 源碼
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
- 示例
Person p1 = new Person("東子",12);
Person p2 = new Person("東子",10);
Person p3 = new Person("東子",19);
Person p4 = new Person("東子",22);
List<Person> list = Arrays.asList(p1,p2,p3,p4);
list.forEach(value -> System.out.println(value.getAge()));
三、空指針處理
四、集合去重
傳統方式:
- 雙重for循環【不推薦】
- 利用hashset :無序
- LinkedHashSet : 有序
- 利用List的contains方法 去重
Java8 方式:
- 利用stream 來去重
list.stream().distinct().collect(Collectors.toList());
五、多個集合合併並且去重
需求:字符串 a-b-c , a-f-c-d , a-b-d-e 用"-"分割 後去重
傳統方式:
①:分割字符串-》string[]
②:string[] -> List<string>
③:多個list 通過hash 、等方法 去重
Java8:利用流中 flatMap
flatMap :將流【數組流 Stream<T[]>、集合流 Stream<List>】
裏面的多個T容器進行合併 , 返回合併後的Stream[T] 流
// 案例 -- 數組合並去重
List<String> list = Arrays.asList("a-b-c","a-b-c-e","a-b-d-e");
List<String> collect = list.stream()
//將流中元素切割處理 返回Stream<String[]>
.map(item -> item.split("-"))
//flatMap 方法 將多個String[] 變爲 一個list
.flatMap(item -> Stream.of(item))
.distinct().collect(Collectors.toList());
//打印
collect.forEach(System.out::println);
================================================================
// 案例2 -- 集合合併去重
List<String> l1 = Arrays.asList("a","b","c");
List<String> l2 = Arrays.asList("b","a","d");
List<String> l3 = Arrays.asList("a","c","d");
List<String> l4 = Arrays.asList("b","c","e");
List<String> l5 = Arrays.asList("a","c","d");
List<List<String>> list = Arrays.asList(l1,l2,l3,l4,l5);
List<String> collect = list.stream().
flatMap(item -> item.stream())
.distinct() //去重
.collect(Collectors.toList());//終止操作 轉爲對應的list
//打印
collect.forEach(System.out::println);