亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java8 實現(xiàn)stream將對象集合list中抽取屬性集合轉化為map或list

 更新時間:2021年02月04日 15:13:21   作者:文耀文耀  
這篇文章主要介紹了Java8 實現(xiàn)stream將對象集合list中抽取屬性集合轉化為map或list的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

首先新建一個實體類Person

@Data
public class Person {
 /** 編碼 */
 private String code;
 /** 名字 */
 private String name;
 public Person(String code, String name) {
  this.code = code;
  this.name = name;
 }
}

實例化三個對象放入list集合中

public static void main(String[] args) {
 Person person1 = new Person("001", "張三");
 Person person2 = new Person("002", "李四");
 Person person3 = new Person("002", "王五");
 List<Person> personList = new ArrayList<>();
 personList.add(person1);
 personList.add(person2);
 personList.add(person3);
 personList.forEach(t -> System.out.println(t.toString()));
}

輸出結果為:

Person(code=001, name=張三)

Person(code=002, name=李四)

Person(code=002, name=王五)

1.抽取對象的code作為key,name作為value轉化為map集合

方法為

private static HashMap<String, String> listToMap(List<Person> personList) {
 return (HashMap<String, String>)personList.stream()
   .filter(t -> t.getName()!=null)
   .collect(Collectors.toMap(Person::getCode,Person::getName,(k1,k2)->k2));
}

filter() 方法作用是過濾掉名字為空的對象,當對象的名字為null時,會出現(xiàn)NPE空指針異常

(k1,k2)->k2 意思是遇到相同的key時取第二個值

(k1,k2)->k1 意思是遇到相同的key時取第一個值

調用這個方法

HashMap<String,String> personMap = listToMap(personList);
personMap.forEach((k,v)-> System.out.println(k.toString() + " - " + v.toString()));

輸出結果為:

001 - 張三

002 - 王五

2.抽取對象的name得到name的list集合

方法為

private static List<String> getNameList(List<Person> personList) {
 return personList.stream().map(Person::getName).collect(Collectors.toList());
}

調用這個方法

List<String> nameList = getNameList(personList);
nameList.forEach(t -> System.out.println(t.toString()));

輸出結果為:

張三

李四

王五

補充:java8 使用stream將List轉成Map,或者從List對象中獲取單個屬性List,List中根據(jù)某個字段排序

1.學生類

import lombok.Data; 
@Data
public class Student{ 
 private String stuId; 
 private String name; 
 private String age; 
 private String sex; 
}

2.測試類

public class Test {
 public static void main(String[] args) {
 
  // 創(chuàng)建學生List
  List<Student> list = createStudentList();
 
  // 1.獲取value為Student對象,key為學生ID的Map
  getStudentObjectMap(list);
 
  // 2.獲取value為學生姓名,key為學生ID的Map
  getStudentNameMap(list);
 
  // 3.獲取學生姓名List
  getStudentNameList(list);
 
  //4.List中刪除學生id = 1的對象
 
  list.removeIf(student -> student.getStuId().equals(1));
 
  //5.如果StudentId為Long類型如何轉?
 
  Map<String, String> mapStr = list.stream().collect(Collectors.toMap(student -> student.getStuId().toString(), student -> JSON.toJSONString(student)));
 
  //6.根據(jù)List中Student的學生姓名排序
  Collections.sort(list, (o1, o2) -> {
   if (o1.getName().compareTo(o2.getName()) > 0) {
    return 1;
   } else if (o1.getName().compareTo(o2.getName()) < 0) {
    return -1;
   } else {
    return 0;
   }
  });
  //7.List遍歷
  List<String> listStr = new ArrayList<>(); 
  List<Student> listStu = new ArrayList<>(); 
  listStr.forEach(studentStr -> { 
   listStu.add(JSON.parseObject(studentStr, Student.class));
 
  });
 
  //List根據(jù)某個字段過濾、排序
  listStu.stream()
    .filter(student -> student.getSex().equals("女"))
    .sorted(Comparator.comparing(Student::getName))
    .collect(Collectors.toList());
 
  //List根據(jù)某個字段分組
  Map<String,List<Student>> sexGroupMap = listStu.stream()
              .collect(Collectors.groupingBy(Student::getSex));
  //如果Map中多個名稱相同,則studentId用逗號間隔
  Map<String,String> studentNameIdMap = listStu.stream()
              .collect(toMap(Student::getName,Student::getStuId,(s,a)->s+","+a));
 }
 
 public static List<Student> createStudentList() {
  List<Student> list = new ArrayList<Student>();
  Student lily = new Student();
  lily.setStuId("1");
  lily.setName("lily");
  lily.setAge("14");
  lily.setSex("女");
  Student xiaoming = new Student();
  xiaoming.setStuId("2");
  xiaoming.setName("xiaoming");
  xiaoming.setAge("15");
  xiaoming.setSex("男");
  list.add(lily);
  list.add(xiaoming);
  return list;
 }
 
 public static Map<Object, Object> getStudentObjectMap(List<Student> list) {
  Map<Object, Object> map = list.stream().collect(Collectors.toMap(Student::getStuId, student -> student));
  map.forEach((key, value) -> {
   System.out.println("key:" + key + ",value:" + value);
  });
  return map;
 }
 
 public static Map<String, String> getStudentNameMap(List<Student> list) {
  Map<String, String> map = list.stream().collect(Collectors.toMap(Student::getStuId, Student::getName));
  map.forEach((key, value) -> {
   System.out.println("key:" + key + ",value:" + value);
  });
  return map;
 }
 
 public static List<String> getStudentNameList(List<Student> list) {
  List<String> result = list.stream().map(student -> student.getName()).collect(Collectors.toList());
  for (String name : result) {
   System.out.println("name:" + name);
  }
  return result;
 }
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關文章

  • Java通過 Socket 實現(xiàn) TCP服務端

    Java通過 Socket 實現(xiàn) TCP服務端

    這篇文章主要介紹了Java通過 Socket 實現(xiàn) TCP服務端的相關資料,需要的朋友可以參考下
    2017-05-05
  • Spring應用中使用acutator/refresh刷新屬性不生效的問題分析及解決

    Spring應用中使用acutator/refresh刷新屬性不生效的問題分析及解決

    在Spring應用收到/actuator/refresh的POST請求后,標注了@RefreshScope以及@ConfiguratioinProperties的bean會被Spring容器重新加載,但是,在實際應用中,并沒有按照預期被Spring容器加載,本文將討論導致這種未按預期刷新的一種原因,感興趣的朋友可以參考下
    2024-01-01
  • 關于Prometheus + Spring Boot 應用監(jiān)控的問題

    關于Prometheus + Spring Boot 應用監(jiān)控的問題

    這篇文章主要介紹了關于Prometheus + Spring Boot 應用監(jiān)控的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • windows 32位eclipse遠程hadoop開發(fā)環(huán)境搭建

    windows 32位eclipse遠程hadoop開發(fā)環(huán)境搭建

    這篇文章主要介紹了windows 32位eclipse遠程hadoop開發(fā)環(huán)境搭建的相關資料,需要的朋友可以參考下
    2016-07-07
  • Java之String類型的編碼方式轉換

    Java之String類型的編碼方式轉換

    這篇文章主要介紹了Java之String類型的編碼方式轉換,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • JAVA項目字典與緩存搭配使用方法解析

    JAVA項目字典與緩存搭配使用方法解析

    這篇文章主要介紹了JAVA項目字典與緩存搭配使用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • JDBC簡介_動力節(jié)點Java學院整理

    JDBC簡介_動力節(jié)點Java學院整理

    什么是JDBC?這篇文章就為大家詳細介紹了Java語言中用來規(guī)范客戶端程序如何來訪問數(shù)據(jù)庫的應用程序接口,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Java編譯和解釋執(zhí)行對比及原理解析

    Java編譯和解釋執(zhí)行對比及原理解析

    這篇文章主要介紹了Java編譯和解釋執(zhí)行對比及原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • struts2.2.3+spring3.1.0+mybatis3.1.0框架整合集成簡單demo

    struts2.2.3+spring3.1.0+mybatis3.1.0框架整合集成簡單demo

    本篇文章主要介紹了struts2.2.3+spring3.1.0 + mybatis3.1.0框架整合,結合在一起實現(xiàn)用戶的增刪改查功能,有需要的可以了解一下。
    2016-11-11
  • Java中線程中斷的幾種方法小結

    Java中線程中斷的幾種方法小結

    在Java中,線程中斷是一種協(xié)作機制,它通過設置線程的中斷標志位來通知線程需要中斷,本文主要介紹了Java中線程中斷的幾種方法小結,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12

最新評論