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

Java將List中對(duì)象的某一列轉(zhuǎn)換為Set

 更新時(shí)間:2025年12月19日 08:37:02   作者:悟能不能悟  
這篇文章主要為大家詳細(xì)介紹了Java如何實(shí)現(xiàn)將List中對(duì)象的某一列轉(zhuǎn)換為Set,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

在 Java 中將 List 中對(duì)象的某一列轉(zhuǎn)換為 Set,有幾種常用方法:

1. 使用 Stream API(最常用)

import java.util.*;
import java.util.stream.Collectors;

// 示例類
class Person {
    private String name;
    private int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public String getName() { return name; }
    public int getAge() { return age; }
}

public class Main {
    public static void main(String[] args) {
        List<Person> personList = Arrays.asList(
            new Person("張三", 25),
            new Person("李四", 30),
            new Person("王五", 25),
            new Person("張三", 28)  // 重復(fù)的張三
        );
        
        // 方法1:提取 name 列到 Set(自動(dòng)去重)
        Set<String> nameSet = personList.stream()
            .map(Person::getName)  // 提取 name
            .collect(Collectors.toSet());
        
        System.out.println(nameSet);  // [張三, 李四, 王五]
        
        // 方法2:提取 age 列到 Set
        Set<Integer> ageSet = personList.stream()
            .map(Person::getAge)
            .collect(Collectors.toSet());
        
        System.out.println(ageSet);  // [25, 30, 28]
    }
}

2. 指定具體的 Set 實(shí)現(xiàn)

// 使用 HashSet
Set<String> nameSet = personList.stream()
    .map(Person::getName)
    .collect(Collectors.toCollection(HashSet::new));

// 使用 TreeSet(排序)
Set<String> sortedNameSet = personList.stream()
    .map(Person::getName)
    .collect(Collectors.toCollection(TreeSet::new));

// 使用 LinkedHashSet(保持插入順序)
Set<String> linkedNameSet = personList.stream()
    .map(Person::getName)
    .collect(Collectors.toCollection(LinkedHashSet::new));

3. 處理可能為 null 的情況

// 方法1:過濾掉 null
Set<String> nameSet = personList.stream()
    .map(Person::getName)
    .filter(Objects::nonNull)  // 過濾 null
    .collect(Collectors.toSet());

// 方法2:使用 filter 和 Optional
Set<String> nameSet = personList.stream()
    .map(Person::getName)
    .filter(name -> name != null && !name.trim().isEmpty())  // 過濾 null 和空字符串
    .collect(Collectors.toSet());

4. 復(fù)雜對(duì)象屬性提取

// 如果屬性是嵌套對(duì)象
class Department {
    private String deptName;
    // getters and setters
}

class Employee {
    private String name;
    private Department department;
    // getters and setters
}

// 提取嵌套屬性
Set<String> deptNames = employeeList.stream()
    .map(Employee::getDepartment)
    .filter(Objects::nonNull)
    .map(Department::getDeptName)
    .collect(Collectors.toSet());

5. 并行流處理(大數(shù)據(jù)量時(shí))

Set<String> nameSet = personList.parallelStream()  // 并行處理
    .map(Person::getName)
    .collect(Collectors.toSet());

6. 傳統(tǒng)方法(不使用 Stream)

// 傳統(tǒng) for 循環(huán)
Set<String> nameSet = new HashSet<>();
for (Person person : personList) {
    nameSet.add(person.getName());
}

// 傳統(tǒng) for 循環(huán),處理 null
Set<String> nameSet = new HashSet<>();
for (Person person : personList) {
    if (person.getName() != null) {
        nameSet.add(person.getName());
    }
}

主要區(qū)別對(duì)比

方法優(yōu)點(diǎn)缺點(diǎn)
Stream API代碼簡潔,可讀性好,支持鏈?zhǔn)秸{(diào)用Java 8+
并行流大數(shù)據(jù)量性能好線程安全需注意
傳統(tǒng)循環(huán)兼容性好,Java 8 以下可用代碼冗長

最佳實(shí)踐建議

  • 推薦使用 Stream API:代碼簡潔,可讀性好
  • 考慮使用 LinkedHashSet:如果需要保持順序
  • 總是處理 null 值:避免 NullPointerException
  • 大數(shù)據(jù)量考慮并行流:但要注意線程安全問題
  • 使用具體類型:明確指定 Set 的實(shí)現(xiàn)類型,便于維護(hù)

到此這篇關(guān)于Java將List中對(duì)象的某一列轉(zhuǎn)換為Set的文章就介紹到這了,更多相關(guān)Java List對(duì)象轉(zhuǎn)Set內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java反射使用示例分享

    java反射使用示例分享

    這篇文章主要介紹了java反射使用示例,代碼很簡單,需要的朋友可以參考下
    2014-02-02
  • SpringBoot3集成Swagger3的詳細(xì)教程

    SpringBoot3集成Swagger3的詳細(xì)教程

    Swagger 3(OpenAPI 3.0)提供了更加強(qiáng)大和靈活的API文檔生成能力,本教程將指導(dǎo)您如何在Spring Boot 3項(xiàng)目中集成Swagger3,并使用Knife4j作為UI界面,需要的朋友可以參考下
    2024-03-03
  • Java實(shí)現(xiàn)簡單的RPC框架的示例代碼

    Java實(shí)現(xiàn)簡單的RPC框架的示例代碼

    本篇文章主要介紹了Java實(shí)現(xiàn)簡單的RPC框架的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • SpringBoot服務(wù)開啟后通過端口訪問無反應(yīng)的解決

    SpringBoot服務(wù)開啟后通過端口訪問無反應(yīng)的解決

    這篇文章主要介紹了SpringBoot服務(wù)開啟后通過端口訪問無反應(yīng)的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • java中每月等額與先息后本計(jì)算

    java中每月等額與先息后本計(jì)算

    一般信用貸款會(huì)提供兩種還款方式:每月等額或者先息后本。每月等額,就是每月歸還等同的部分本金和利息,你手里在使用的本金其實(shí)是逐月減少的。先息后本就是先還利息,到期歸還本金。本文將介紹他們的實(shí)現(xiàn)方法。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-03-03
  • jstack報(bào)錯(cuò)Unable to open socket file解決

    jstack報(bào)錯(cuò)Unable to open socket file解決

    這篇文章主要為大家介紹了jstack報(bào)錯(cuò)Unable to open socket file的解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-02-02
  • Java實(shí)現(xiàn)TXT文件導(dǎo)入功能的詳細(xì)步驟

    Java實(shí)現(xiàn)TXT文件導(dǎo)入功能的詳細(xì)步驟

    在實(shí)際開發(fā)中,很多應(yīng)用場景需要將用戶上傳的 TXT 文件進(jìn)行解析,并將文件中的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫或其他存儲(chǔ)系統(tǒng)中,本文將演示如何用 Java 實(shí)現(xiàn)一個(gè)基本的 TXT 文件導(dǎo)入功能,需要的朋友可以參考下
    2025-08-08
  • Java中注解@Async實(shí)現(xiàn)異步及導(dǎo)致失效原因分析

    Java中注解@Async實(shí)現(xiàn)異步及導(dǎo)致失效原因分析

    Async注解用于聲明一個(gè)方法是異步的,當(dāng)在方法上加上這個(gè)注解時(shí)將會(huì)在一個(gè)新的線程中執(zhí)行該方法,而不會(huì)阻塞原始線程,這篇文章主要給大家介紹了關(guān)于Java中注解@Async實(shí)現(xiàn)異步及導(dǎo)致失效原因分析的相關(guān)資料,需要的朋友可以參考下
    2024-07-07
  • Spring?Boot日志打印配置詳細(xì)介紹

    Spring?Boot日志打印配置詳細(xì)介紹

    本文詳細(xì)介紹了如何在SpringBoot項(xiàng)目中進(jìn)行日志配置,包括日志框架概述、日志級(jí)別配置、日志文件輸出與滾動(dòng)配置、電商交易系統(tǒng)中的應(yīng)用示例以及常見日志問題及解決方案,通過靈活的日志配置,開發(fā)者可以更好地管理和調(diào)試軟件系統(tǒng),需要的朋友可以參考下
    2024-11-11
  • Java案例分享-集合嵌套

    Java案例分享-集合嵌套

    這篇文章主要介紹了Java案例分享-集合嵌套,通過案例創(chuàng)建一個(gè)ArrayList集合,存儲(chǔ)三個(gè)元素,每一個(gè)元素都是HashMap,每一個(gè)HashMap的鍵和值都是String,并遍歷,實(shí)際操作內(nèi)容需要的小伙伴可以參考一下
    2022-04-04

最新評(píng)論

庄浪县| 龙川县| 正定县| 澄江县| 布尔津县| 竹山县| 麻栗坡县| 游戏| 垣曲县| 盱眙县| 昌黎县| 灌南县| 沁水县| 宁南县| 木里| 咸宁市| 神农架林区| 贡觉县| 磐石市| 恭城| 闸北区| 怀安县| 襄樊市| 吴旗县| 北川| 兰西县| 咸阳市| 宜兴市| 光山县| 镇安县| 崇礼县| 涡阳县| 平邑县| 通城县| 茌平县| 江达县| 喀什市| 库尔勒市| 威宁| 庆安县| 临城县|