Java8 新特性 Stream流操作List集合 (二)
lambda表示式的list去重和list轉map
public static List<Employee> createEmployee() {
List<Employee> employeeList = new ArrayList<Employee>();
Employee employee1 = new Employee();
Employee employee2 = new Employee();
Employee employee3 = new Employee();
employee1.setEmployeeId("1");
employee1.setEmployeeName("張三");
employee1.setEmployeeSex("男");
employee2.setEmployeeId("2");
employee2.setEmployeeName("王五");
employee2.setEmployeeSex("男");
employee3.setEmployeeId("3");
employee3.setEmployeeName("李四");
employee3.setEmployeeSex("男");
employeeList.add(employee1);
employeeList.add(employee2);
employeeList.add(employee3);
return employeeList;
}
public static List<Employee> createEmployee2() {
List<Employee> employeeList = new ArrayList<Employee>();
Employee employee1 = new Employee();
Employee employee2 = new Employee();
Employee employee3 = new Employee();
Employee employee4 = new Employee();
employee1.setEmployeeId("1");
employee1.setEmployeeName("張三");
employee1.setEmployeeSex("男");
employee2.setEmployeeId("1");
employee2.setEmployeeName("王五");
employee2.setEmployeeSex("男");
employee1.setEmployeeId("1");
employee1.setEmployeeName("田七");
employee1.setEmployeeSex("男");
employee3.setEmployeeId("3");
employee3.setEmployeeName("李四");
employee3.setEmployeeSex("男");
employeeList.add(employee1);
employeeList.add(employee2);
employeeList.add(employee3);
return employeeList;
}
public static List<String> createString() {
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("1");
list.add("2");
return list;
}
public static void list() {
// 去重list
List<String> listString = createString();
System.out.println(listString.stream().distinct().collect(Collectors.toList()));
System.out.println("******************************************************************");
// list 轉 map map的value 就是 Employee 物件
List<Employee> employeeList = createEmployee();
Map<String, Employee> map = employeeList.stream().collect(Collectors.toMap(Employee::getEmployeeId, employee -> employee));
map.forEach((k, v) -> {
System.out.println("key: " + k + " value: " + v);
});
System.out.println("******************************************************************");
// list 轉 map 涉及key 重複
// 第一種寫法 (k1, k2) -> k1) 的意思是保留 k1 存在重複不傳第三個處理引數會報錯 Duplicate key
List<Employee> employeeList2 = createEmployee2();
Map<String, String> map1 = employeeList2.stream().collect(Collectors.toMap(e -> e.getEmployeeId(), e -> e.getEmployeeName(), (k1, k2) -> k1));
System.out.println(map1);
System.out.println("******************************************************************");
// 第二種寫法
Map map2 = employeeList2.stream().collect(HashMap::new, (map3, e) -> map3.put(e.getEmployeeId(), e.getEmployeeName()), Map::putAll);
System.out.println(map2);
System.out.println("******************************************************************");
// 處理遍歷中存在null 的情況 value 為 null 會報空指標
// 異常重現
// Map<String, String> map3 = employeeList.stream().collect(Collectors.toMap(e -> e.getEmployeeId(), e -> e.getEmployeeBirthDay()));
// System.out.println(map3);
// 解決異常
Map<String, String> map3 = employeeList.stream().collect(Collectors.toMap(e -> e.getEmployeeId(), e -> Optional.ofNullable(e.getEmployeeBirthDay()).orElse("沒有資料")));
System.out.println(map3);
System.out.println("******************************************************************");
// 當 key 全部為 null 時 而 value 唯一就會報錯出現Duplicate key value的情況
// 異常重現
// Map<String, String> map4 = employeeList2.stream().collect(Collectors.toMap(Employee::getEmployeeBirthDay, Employee::getEmployeeName));
// System.out.println(map4);
// 解決異常 指定出現重複的key之後保留的欄位 (解決方法很多,中心圍繞在如何解決掉重複的問題,一般都是覆蓋)
Map<String, String> map4 = employeeList2.stream().collect(Collectors.toMap(Employee::getEmployeeBirthDay, Employee::getEmployeeName, (k1, k2) -> k1));
System.out.println(map4);
}
public static void main(String[] args) {
list();
}
相關文章
- java8新特性stream流Java
- Java8的stream流讓操作集合更容易Java
- Java8新特性——從Lambda表示式到Stream流Java
- list轉map,使用java8,stream流Java
- Java8新特性--Stream APIJavaAPI
- java8 Stream流操作介紹Java
- JDK新特性--Stream流JDK
- Java8新特性探索之Stream介面Java
- Java8之Stream流(三)縮減操作Java
- Java8 新特性 —— Stream 流式程式設計Java程式設計
- Stream流對List集合篩選重複欄位
- Java8——Stream流Java
- 【Java8新特性】面試官問我:Java8中建立Stream流有哪幾種方式?Java面試
- [譯] 一文帶你玩轉 Java8 Stream 流,從此操作集合 So EasyJava
- JDK8新特性(4)—— stream 流JDK
- JDK8新特性之Stream流JDK
- 【Java8新特性】面試官:談談Java8中的Stream API有哪些終止操作?Java面試API
- Java8的新特性--並行流與序列流Java並行
- Java 8 新特性:Stream 流快速入門Java
- 13. 尚矽谷_Java8新特性_Stream API 練習JavaAPI
- 【Java8新特性】Stream API有哪些中間操作?看完你也可以吊打面試官!!JavaAPI面試
- java 8 特性——stream流Java
- Java8 Stream流的合併Java
- Java8之Stream常用操作方式Java
- JAVA8新特性Java
- Java8 新特性Java
- 【Java8新特性】關於Java8的Stream API,看這一篇就夠了!!JavaAPI
- Java8 Stream,簡潔快速處理集合(上)Java
- Java8 Stream,簡潔快速處理集合(下)Java
- Java 8 新特性 StreamJava
- JAVA 1.8 新特性 StreamJava
- Java8新特性 - LambdaJava
- Java8的新特性Java
- JAVA8新特性用法Java
- 【進階篇】使用 Stream 流對比兩個集合的常用操作分享
- Java8 中使用Stream 讓List 轉 Map使用總結Java
- Java8新特性系列-LambdaJava
- Java8新特性之:OptionalJava