最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

首先新建一個(gè)實(shí)體類Person

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

實(shí)例化三個(gè)對(duì)象放入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()));
}

輸出結(jié)果為:

Person(code=001, name=張三)

Person(code=002, name=李四)

Person(code=002, name=王五)

1.抽取對(duì)象的code作為key,name作為value轉(zhuǎn)化為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() 方法作用是過濾掉名字為空的對(duì)象,當(dāng)對(duì)象的名字為null時(shí),會(huì)出現(xiàn)NPE空指針異常

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

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

調(diào)用這個(gè)方法

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

輸出結(jié)果為:

001 - 張三

002 - 王五

2.抽取對(duì)象的name得到name的list集合

方法為

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

調(diào)用這個(gè)方法

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

輸出結(jié)果為:

張三

李四

王五

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

1.學(xué)生類

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

2.測(cè)試類

public class Test {
 public static void main(String[] args) {
 
  // 創(chuàng)建學(xué)生List
  List<Student> list = createStudentList();
 
  // 1.獲取value為Student對(duì)象,key為學(xué)生ID的Map
  getStudentObjectMap(list);
 
  // 2.獲取value為學(xué)生姓名,key為學(xué)生ID的Map
  getStudentNameMap(list);
 
  // 3.獲取學(xué)生姓名List
  getStudentNameList(list);
 
  //4.List中刪除學(xué)生id = 1的對(duì)象
 
  list.removeIf(student -> student.getStuId().equals(1));
 
  //5.如果StudentId為L(zhǎng)ong類型如何轉(zhuǎn)?
 
  Map<String, String> mapStr = list.stream().collect(Collectors.toMap(student -> student.getStuId().toString(), student -> JSON.toJSONString(student)));
 
  //6.根據(jù)List中Student的學(xué)生姓名排序
  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ù)某個(gè)字段過濾、排序
  listStu.stream()
    .filter(student -> student.getSex().equals("女"))
    .sorted(Comparator.comparing(Student::getName))
    .collect(Collectors.toList());
 
  //List根據(jù)某個(gè)字段分組
  Map<String,List<Student>> sexGroupMap = listStu.stream()
              .collect(Collectors.groupingBy(Student::getSex));
  //如果Map中多個(gè)名稱相同,則studentId用逗號(hào)間隔
  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;
 }
}

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

相關(guān)文章

  • java接收文件流+response.body()調(diào)用兩次問題(分別接收文件和對(duì)象)

    java接收文件流+response.body()調(diào)用兩次問題(分別接收文件和對(duì)象)

    這篇文章主要介紹了java接收文件流+response.body()調(diào)用兩次問題(分別接收文件和對(duì)象),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • nacos(SpringCloud)配置加載過程

    nacos(SpringCloud)配置加載過程

    Nacos是Spring Cloud的配置中心,通過BootstrapApplicationListener和ConfigFileApplicationListener監(jiān)聽器加載配置文件,并通過PropertySourceBootstrapConfiguration將Nacos配置加載到Spring Boot應(yīng)用的environment中
    2024-12-12
  • Java使用POI-TL實(shí)現(xiàn)生成有個(gè)性的簡(jiǎn)歷

    Java使用POI-TL實(shí)現(xiàn)生成有個(gè)性的簡(jiǎn)歷

    POI-TL?是一個(gè)基于?Apache?POI?的?Java?庫,專注于在?Microsoft?Word?文檔(.docx?格式)中進(jìn)行模板填充和動(dòng)態(tài)內(nèi)容生成,下面我們看看如何使用POI-TL生成有個(gè)性的簡(jiǎn)歷吧
    2024-11-11
  • Struts2 Result 參數(shù)詳解

    Struts2 Result 參數(shù)詳解

    這篇文章主要講解Struts2 Result的參數(shù),講的比較詳細(xì),希望能給大家做一個(gè)參考。
    2016-06-06
  • Java如何獲取Date的“昨天”與“明天”示例代碼

    Java如何獲取Date的“昨天”與“明天”示例代碼

    最近在做項(xiàng)目的時(shí)候用到Date和Calendar比較多,而且用到的方式也比較全,突然想到一個(gè)問題,Java如何獲取Date的"昨天"與"明天",也就是前一天和后一天呢?思考后寫出了方法,想著萬一以后用到,就總結(jié)出來,也方便有需要的朋友們參考借鑒,下面來一起看看吧。
    2016-12-12
  • Java實(shí)現(xiàn)郵件發(fā)送QQ郵箱帶附件

    Java實(shí)現(xiàn)郵件發(fā)送QQ郵箱帶附件

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)郵件發(fā)送QQ郵箱帶附件功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Java FileInputStream與FileOutputStream使用詳解

    Java FileInputStream與FileOutputStream使用詳解

    這篇文章主要介紹了Java FileInputStream與FileOutputStream使用詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • SpringBoot?AOP中JoinPoint的使用方式和通知切點(diǎn)表達(dá)式

    SpringBoot?AOP中JoinPoint的使用方式和通知切點(diǎn)表達(dá)式

    這篇文章主要介紹了SpringBoot?AOP中JoinPoint的使用方式和通知切點(diǎn)表達(dá)式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java項(xiàng)目開發(fā)命名規(guī)范(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)

    Java項(xiàng)目開發(fā)命名規(guī)范(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)

    定義這個(gè)規(guī)范的目的是讓項(xiàng)目中所有的文檔都看起來像一個(gè)人寫的,增加可讀性,減少項(xiàng)目組中因?yàn)閾Q人而帶來的損失。下面給大家分享java開發(fā)命名規(guī)范,一起看看吧
    2017-03-03
  • SpringBoot注冊(cè)web組件的實(shí)現(xiàn)方式

    SpringBoot注冊(cè)web組件的實(shí)現(xiàn)方式

    Servlet是Java Web應(yīng)用程序的基礎(chǔ),它提供了處理客戶端請(qǐng)求的機(jī)制,Servlet三大組件是指Servlet、Filter和Listener,它們是Java Web應(yīng)用程序的核心組件,本文將給大家介紹一下SpringBoot注冊(cè)web組件的實(shí)現(xiàn)方式,需要的朋友可以參考下
    2023-10-10

最新評(píng)論

罗甸县| 平昌县| 塘沽区| 灵川县| 平南县| 樟树市| 安陆市| 甘孜县| 抚远县| 舞阳县| 乌拉特中旗| 阳谷县| 汕尾市| 新蔡县| 江永县| 中山市| 都昌县| 肥城市| 福清市| 修武县| 新密市| 夏津县| 雅安市| 祁门县| 通州区| 嘉鱼县| 澄江县| 昌邑市| 高唐县| 马公市| 满城县| 讷河市| 隆尧县| 攀枝花市| 顺昌县| 寿光市| 广东省| 本溪市| 蒙城县| 新干县| 嘉祥县|