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

Java中List常用操作比for循環(huán)更優(yōu)雅的寫法示例

 更新時間:2021年11月03日 15:16:02   作者:Mr泰迪  
List是Java中比較常用的集合類,關于List接口有很多實現類,下面這篇文章主要給大家介紹了關于Java中List常用操作比for循環(huán)更優(yōu)雅的寫法,需要的朋友可以參考下

引言

使用JDK1.8之后,大部分list的操作都可以使用lambda表達式去寫,可以讓代碼更簡潔,開發(fā)更迅速。以下是我在工作中常用的lambda表達式對list的常用操作,喜歡建議收藏。

以用戶表為例,用戶實體代碼如下:

public class User {
    private Integer id; //id

    private String name; //姓名

    private Integer age; //年齡

    private Integer departId; //所屬部門id
}

List<User> list = new ArrayList<>();

簡單遍歷

使用lambda表達式之前,如果需要遍歷list時,一般使用增強for循環(huán),代碼如下:

List<User> list = new ArrayList<>();
for (User u:list) {
    System.out.println(u.toString());
}

使用lambda表達式之后,可以縮短為一行代碼:

list.forEach(u-> System.out.println(u.toString()));

篩選符合某屬性條件的List集合

以篩選年齡在15-17之間的用戶為例,for循環(huán)寫法為:

List<User> users = new ArrayList<>();
for (User u : list) {
	if (u.getAge() >= 15 && u.getAge() <= 17) {
		users.add(u);
	}
}

使用lambda表達式寫法為:

List<User> users = list.stream()
                           .filter(u -> u.getAge() >= 15 && u.getAge() <= 17)
                           .collect(Collectors.toList());

獲取某屬性返回新的List集合

以獲取id為例,項目中有時候可能會需要根據用戶id的List進行查詢或者批量更新操作,這時候就需要用戶id的List集合,for循環(huán)寫法為:

List<Integer> ids = new ArrayList<>();
for (User u:list) {
	ids.add(u.getId());
}

lambda表達式寫法為:

List<User> users = list.stream()
                           .filter(u -> u.getAge() >= 15 && u.getAge() <= 17)
                           .collect(Collectors.toList());

獲取以某屬性為key,其他屬性或者對應對象為value的Map集合

以用戶id為key(有時可能需要以用戶編號為key),以id對應的user作為value構建Map集合,for循環(huán)寫法為:

Map<Integer,User> userMap = new HashMap<>();
for (User u:list) {
	if (!userMap.containsKey(u.getId())){
		userMap.put(u.getId(),u);
	}
}

lambda表達式寫法為:

Map<Integer,User> map = list.stream()
                                     .collect(Collectors.toMap(User::getId, 
                                     Function.identity(),
                                     (m1,m2)->m1));

Function.identity()返回一個輸出跟輸入一樣的Lambda表達式對象,等價于形如t -> t形式的Lambda表達式。
(m1,m2)-> m1此處的意思是當轉換map過程中如果list中有兩個相同id的對象,則map中存放的是第一個對象,此處可以根據項目需要自己寫。

以某個屬性進行分組的Map集合

以部門id為例,有時需要根據部門分組,篩選出不同部門下的人員,如果使用for循環(huán)寫法為:

Map<Integer,List<User>> departGroupMap = new HashMap<>();
for (User u:list) {
 if (departGroupMap.containsKey(u.getDepartId())){
            departGroupMap.get(u.getDepartId()).add(u);
 }else {
            List<User> users1 = new ArrayList<>();
            users1.add(u);
            departGroupMap.put(u.getDepartId(),users1);
 }
}

使用lambda表達式寫法為:

Map<Integer,List<User>> departGroupMap = list.stream()
                                                                 .collect(Collectors
                                                                 .groupingBy(User::getDepartId));

其他情況

可以根據需要結合stream()進行多個操作,比如篩選出年齡在15-17歲的用戶,并且根據部門進行分組分組,如果使用for循環(huán),代碼如下:

Map<Integer,List<User>> departGroupMap = new HashMap<>();
for (User u:list) {
	if (u.getAge() >= 15 && u.getAge() <= 17) {
		if (departGroupMap.containsKey(u.getDepartId())){
			departGroupMap.get(u.getDepartId()).add(u);
		}else {
			List<User> users1 = new ArrayList<>();
			users1.add(u);
			departGroupMap.put(u.getDepartId(),users1);
		}
	}
}

使用lambda表達式,代碼如下:

Map<Integer,List<User>> departGroupMap = list.stream()
                                                               .filter(u->u.getAge() >= 15 && u.getAge() <= 17)
                                                               .collect(Collectors.groupingBy(User::getDepartId));

總結

上述部分是小編在工作中遇到的常用的單個List的操作,可能在項目中還會遇到更復雜的場景,可以根據需要進行多個方法的組合使用,我的感覺是使用lambda表達式代碼更加簡潔明了,當然各人有各人的編碼習慣,不喜勿噴。

到此這篇關于Java中List常用操作比for循環(huán)更優(yōu)雅的寫法的文章就介紹到這了,更多相關Java中List常用操作內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MQ的消息模型及在工作上應用場景

    MQ的消息模型及在工作上應用場景

    這篇文章主要介紹了MQ的消息模型及在工作上應用場景,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Spring中的@ModelAttribute模型屬性綁定詳解

    Spring中的@ModelAttribute模型屬性綁定詳解

    這篇文章主要介紹了Spring中的@ModelAttribute模型屬性綁定詳解,@ModelAttribute用于將方法參數或返回值綁定到Model屬性上,并公開給Web視圖,支持使用@RequestMapping注釋的Controller類,需要的朋友可以參考下
    2024-02-02
  • Mybatis通過Spring完成代理類注入的流程分析

    Mybatis通過Spring完成代理類注入的流程分析

    這篇文章主要介紹了Mybatis通過Spring完成代理類注入的流程分析,本文通過實例圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Spring-retry實現循環(huán)重試功能

    Spring-retry實現循環(huán)重試功能

    這篇文章主要介紹了Spring-retry 優(yōu)雅的實現循環(huán)重試功能,通過@Retryable注解,優(yōu)雅的實現循環(huán)重試功能,需要的朋友可以參考下
    2023-07-07
  • Javaweb使用getPart接收表單文件過程解析

    Javaweb使用getPart接收表單文件過程解析

    這篇文章主要介紹了Javaweb使用getPart接收表單文件過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • SpringBoot+MyBatis-Plus實現數據庫讀寫分離的代碼示例

    SpringBoot+MyBatis-Plus實現數據庫讀寫分離的代碼示例

    在當今互聯網應用中,數據庫讀寫分離是提高系統性能和穩(wěn)定性的重要手段之一,通過將讀操作和寫操作分別路由到不同的數據庫節(jié)點,可以有效減輕數據庫服務器的負擔,本文將介紹如何利用SpringBoot和MyBatis-Plus框架實現數據庫讀寫分離,需要的朋友可以參考下
    2023-11-11
  • selenium4.0版本在springboot中的使用問題的坑

    selenium4.0版本在springboot中的使用問題的坑

    本文主要介紹了selenium4.0版本在springboot中的使用問題的坑,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • Log4j日志分類和過濾敏感字段的實例

    Log4j日志分類和過濾敏感字段的實例

    這篇文章主要介紹了Log4j日志分類和過濾敏感字段的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 詳解Java創(chuàng)建多線程的四種方式以及優(yōu)缺點

    詳解Java創(chuàng)建多線程的四種方式以及優(yōu)缺點

    這篇文章主要介紹了Java創(chuàng)建多線程的四種方式以及優(yōu)缺點,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • 解決spring boot 1.5.4 配置多數據源的問題

    解決spring boot 1.5.4 配置多數據源的問題

    下面小編就為大家?guī)硪黄鉀Qspring boot 1.5.4 配置多數據源的問題。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06

最新評論