国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

快速去重:使用Java根據(jù)對象某一屬性去除重復對象的實現(xiàn)指南

這篇具有很好參考價值的文章主要介紹了快速去重:使用Java根據(jù)對象某一屬性去除重復對象的實現(xiàn)指南。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?一、導言

???? Java中的對象去重操作?跟著小編一起學習吧!??

在處理對象集合時,有時候我們需要根據(jù)對象的某個屬性進行去重操作。Java給我們提供了多種方法來實現(xiàn)這個功能。今天,小編就來給大家介紹一下如何使用Java根據(jù)對象的某個屬性進行去重操作。??

方案一:使用自定義equals()和hashCode()方法

I.原理講解

  • 提供一個自定義的類,包含需要去重的屬性。
  • 重寫equals()方法,比較對象的name屬性是否相等。
  • 重寫hashCode()方法,根據(jù)屬性生成哈希碼。
  • 使用HashSet或LinkedHashSet進行去重操作。

II. 代碼示例

// 重新equals和hashCode方法
public class Person {

    public String name;
    public Integer age;
    public Sex sex;
    
   
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name);
    }

    ······
}

public class ObjectDistinctTest {

    public Person[] peoples;

    public List<Person> personList;

    // 構建數(shù)據(jù)源
    @Before
    public void before() {
        Person person = new Chinese("大白", 21, Sex.man);
        Person person1 = new Chinese("小蘭", 25, Sex.woman);
        Person person2 = new Chinese("小紅", 23, Sex.woman);
        Person person3 = new Chinese("小趙", 20, Sex.man);
        Person person4 = new Chinese("小青", 18, Sex.woman);
        Person person5 = new Chinese("小趙", 17, Sex.man);
        Person person6 = new Chinese("小麻", 50, Sex.man);
        this.peoples =new Person[]{ person, person1, person2, person3, person4, person5, person6};
        this.personList = Arrays.asList(peoples);
    }

    /**
     * 使用自定義equals()和hashCode()方法
     */
    @Test
    public void testCase01() {

        // 需求:根據(jù)Person對象的name屬性進行去重,name屬性相同,則視為重復元素
        // 存入順序和取出順序不一致
        Set<Person> distinctPersonSet = new HashSet<>();

        for (Person person : personList) {
            distinctPersonSet.add(person); //
        }

        List<Person> distinctPersonList = new ArrayList<>(distinctPersonSet);
        distinctPersonList.forEach(System.out::println); // 打印去重后的數(shù)據(jù)
    }

    /**
     * 使用自定義equals()和hashCode()方法
     */
    @Test
    public void testCase02() {
        // 或使用 LinkedHashSet 保持插入順序
        Set<Person> distinctPersonSet = new LinkedHashSet<>();

        for (Person person : personList) {
            distinctPersonSet.add(person);
        }

        List<Person> distinctPersonList = new ArrayList<>(distinctPersonSet);
        distinctPersonList.forEach(System.out::println); // 打印去重后的數(shù)據(jù)
    }
}



方案二:使用循環(huán)和集合

I.原理講解

  • 創(chuàng)建了一個新的集合來存儲去重后的對象
  • 遍歷集合列表
  • 判斷對象屬性是否重復
  • 去除重復對象

II. 代碼示例

public class ObjectDistinctTest {

    public Person[] peoples;

    public List<Person> personList;

    // 構建數(shù)據(jù)源
    @Before
    public void before() {
        Person person = new Chinese("大白", 21, Sex.man);
        Person person1 = new Chinese("小蘭", 25, Sex.woman);
        Person person2 = new Chinese("小紅", 23, Sex.woman);
        Person person3 = new Chinese("小趙", 20, Sex.man);
        Person person4 = new Chinese("小青", 18, Sex.woman);
        Person person5 = new Chinese("小趙", 17, Sex.man);
        Person person6 = new Chinese("小麻", 50, Sex.man);
        this.peoples =new Person[]{ person, person1, person2, person3, person4, person5, person6};
        this.personList = Arrays.asList(peoples);
    }

    @Test
    public void testCase() {
        // 此方式無需實現(xiàn)equals方法
        List<Person> newList = new ArrayList<>();
        for (Person person: this.personList
        ) {
            if (newList.stream().noneMatch(x -> x.getName().equals(person.getName()))) { // 判斷新集合中是否包含此對象,不包含才能加入到新集合中
                newList.add(person);
            }
        }
        List<Person> distinctList = newList.stream().sorted(Comparator.comparing(Person::getAge)).collect(Collectors.toList());
        distinctList.forEach(System.out::println);
    }

}

方案三:使用自定義equals()和Java 8中的distinct方法

I.原理講解

  • 提供一個自定義的類,包含需要去重的屬性。
  • 重寫equals()方法,比較對象的name屬性是否相等。
  • 重寫hashCode()方法,根據(jù)屬性生成哈希碼。
  • 使用Java 8Stream API中的distinct方法進行去重操作

II. 代碼示例

// 重新equals和hashCode方法
public class Person {

    public String name;
    public Integer age;
    public Sex sex;
    
   
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name);
    }

    ······
}

public class ObjectDistinctTest {

    public Person[] peoples;

    public List<Person> personList;

    // 構建數(shù)據(jù)源
    @Before
    public void before() {
        Person person = new Chinese("大白", 21, Sex.man);
        Person person1 = new Chinese("小蘭", 25, Sex.woman);
        Person person2 = new Chinese("小紅", 23, Sex.woman);
        Person person3 = new Chinese("小趙", 20, Sex.man);
        Person person4 = new Chinese("小青", 18, Sex.woman);
        Person person5 = new Chinese("小趙", 17, Sex.man);
        Person person6 = new Chinese("小麻", 50, Sex.man);
        this.peoples =new Person[]{ person, person1, person2, person3, person4, person5, person6};
        this.personList = Arrays.asList(peoples);
    }

    /**
     * 使用自定義equals()和Stream API中的distinct方法實現(xiàn)元素的去重
     */
    @Test
    public void testCase01() {

        // 需求:根據(jù)Person對象的name屬性進行去重,name屬性相同,則視為重復元素
           this.personList.stream()    // 獲取流對象
                .distinct()         // 去除重復元素
                .collect(Collectors.toList())   // 收集為List集合
                .forEach(System.out::println);  // 打印去重后的元素
    }
}



方案四:將List以name屬性為key轉換為Map

I.原理講解

  • 使用Stream API中的終結方法collect
  • 將List轉為Map,key為Person類中的name屬性,value為Person對象
  • 獲取使用values方法,獲取Map中的value,即為去重后的List

II. 代碼示例

public class ObjectDistinctTest {

    public Person[] peoples;

    public List<Person> personList;

    // 構建數(shù)據(jù)源
    @Before
    public void before() {
        Person person = new Chinese("大白", 21, Sex.man);
        Person person1 = new Chinese("小蘭", 25, Sex.woman);
        Person person2 = new Chinese("小紅", 23, Sex.woman);
        Person person3 = new Chinese("小趙", 20, Sex.man);
        Person person4 = new Chinese("小青", 18, Sex.woman);
        Person person5 = new Chinese("小趙", 17, Sex.man);
        Person person6 = new Chinese("小麻", 50, Sex.man);
        this.peoples =new Person[]{ person, person1, person2, person3, person4, person5, person6};
        this.personList = Arrays.asList(peoples);
    }

   
    @Test
    public void testCase03() {
        this.personList.stream() // 獲取流對象
                .collect(Collectors.toMap(Person::getName, y -> y,(s, a) -> s))// 將List根據(jù)Person類中的name屬性收集為Map,key為name,value為Person對象,當后面對象name屬性跟前者相同時,使用前者。
                .values()    // 獲取Map中的key
                .stream()
                .collect(Collectors.toList())
                .forEach(System.out::println);
    }
}

五、總結

想象一下,現(xiàn)在你可以輕松地根據(jù)對象的某一屬性去除重復對象了!??

不僅如此,這個技巧還可以應用在各種不同的場景中,讓你的代碼更加簡潔高效!??

不管是初學者還是資深開發(fā)者,都會對這個技巧愛不釋手!快來試試吧!??文章來源地址http://www.zghlxwxcb.cn/news/detail-757383.html

到了這里,關于快速去重:使用Java根據(jù)對象某一屬性去除重復對象的實現(xiàn)指南的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • list根據(jù)對象中某個字段屬性去重Java流實現(xiàn)

    list根據(jù)對象中某個字段屬性去重Java流實現(xiàn)

    在Java的流(Stream)中,你可以使用distinct方法來實現(xiàn)根據(jù)對象中某個字段屬性去重的功能。要實現(xiàn)這個功能,你需要重寫對象的hashCode和equals方法,以確保相同字段屬性的對象被認為是相等的。以下是一個示例代碼: 在上面的代碼中,YourObject是你自定義的對象類型,你需要根據(jù)

    2024年02月10日
    瀏覽(101)
  • java8 列表通過 stream流 根據(jù)對象屬性去重的三種實現(xiàn)方法

    java8 列表通過 stream流 根據(jù)對象屬性去重的三種實現(xiàn)方法

    0、User對象 1、使用filter進行去重 測試 ①、疑惑 既然 filter 里面調用的是 distinctPredicate 方法,而該方法每次都 new 一個新的 map 對象,那么 map 就是新的,怎么能做到可以過濾呢 ②、解惑 先看一下 filter 的部分實現(xiàn)邏輯,他使用了函數(shù)式接口 Predicate ,每次調用filter時,會使用

    2024年01月20日
    瀏覽(431)
  • Stream流中,根據(jù)對象去重+指定對象中的屬性去重

    Stream流中,根據(jù)對象去重+指定對象中的屬性去重

    首先定義一個學生類: 在main方法中構造四個對象,其中第四個對象為重復對象,現(xiàn)在進行對象的去重、以及對象中某一屬性的去重操作 一、根據(jù)對象去重: 以下代碼寫于main函數(shù)中: 運行結果如下,可以看到,stream流的distinct只是將對象去重,將相同的第三個和第四個對象

    2024年02月02日
    瀏覽(93)
  • Java通過Lambda表達式根據(jù)指定字段去除重復數(shù)據(jù)(集合去重)

    Java通過Lambda表達式根據(jù)指定字段去除重復數(shù)據(jù)(集合去重)

    這里博主給大家封裝好了一個工具類,里面有兩個方法。 方法一:可以根據(jù)指定字段去除重復數(shù)據(jù)。 方法二:可以獲取到重復的數(shù)據(jù)。 大家在使用過程中直接拷貝下方代碼在要去重的類中調用即可。 導入這個工具類后怎么使用呢?我們接著往下看。 List rstList = list.stream()

    2024年02月16日
    瀏覽(98)
  • JAVA 使用stream流將List中的對象某一屬性創(chuàng)建新的List

    Java Stream是Java 8引入的一種新機制,它可以讓我們以聲明式方式操作集合數(shù)據(jù),提供了更加簡潔、優(yōu)雅的集合處理方式。Stream是一個來自數(shù)據(jù)源的元素隊列,并支持聚合操作。它的特點有: Stream 不會修改原始數(shù)據(jù)源。 Stream 操作是延遲執(zhí)行的。 Stream 操作可以是無限的(比如

    2024年02月03日
    瀏覽(93)
  • java 對象List中對象的某一屬性重新賦值

    描述: 在我們開發(fā)過程中經(jīng)常會遇到在拿到一個對象list集合的時候回對某一個字段重新賦值,比如:在無任務下面的若干子任務,開始執(zhí)行主任務對子任務的狀態(tài)統(tǒng)一設置待執(zhí)行。這個時候就需要使用 Java8 stream 或者 List forEach 這兩種方式來實現(xiàn),方便快捷,也不需要再遍歷

    2024年02月12日
    瀏覽(32)
  • java 對象list使用stream根據(jù)某一個屬性轉換成map的幾種方式

    可以使用Java 8中的Stream API將List轉換為Map,并根據(jù)某個屬性作為鍵或值。以下是一些示例代碼: 在這個示例中,將Person對象列表轉換為Map,其中鍵為Person對象的name屬性,值為Person對象本身。 在這個示例中,將Person對象列表轉換為Map,其中鍵為Person對象本身,值為Person對象的

    2024年02月13日
    瀏覽(97)
  • Java中List集合對象去重及按屬性去重的8種方法

    是大家最容易想到的,先把List數(shù)據(jù)放入Set,因為Set數(shù)據(jù)結構本身具有去重的功能,所以再將SET轉為List之后就是去重之后的結果。這種方法在去重之后會改變原有的List元素順序,因為HashSet本身是無序的,而TreeSet排序也不是List種元素的原有順序。 去重后的集合: [kobe, james,

    2024年04月15日
    瀏覽(842)
  • golang實現(xiàn)es根據(jù)某字段分組,統(tǒng)計每組某一字段的數(shù)量,過濾空值并去重

    需求: 索引:dna 需求:根據(jù)app.Id分組,統(tǒng)計每組的OwnerBid數(shù)量,過濾空值并去重 dna索引結構 es查詢語句 es查詢結果 goalng實現(xiàn) models.EsCountAgg 【面向校招】全力備戰(zhàn)2023Golang實習與校招 歡迎進群交流:1007576722

    2024年02月17日
    瀏覽(24)
  • Stream流根據(jù)屬性去重

    創(chuàng)建一個user集合 寫一個Predict 使用filter方法 結果: 小結: 實質上是將每個元素都放到distinctByKey()中的ConcurrentHashMap作為key進行過濾,如果key不存在那么就加上去,如果已經(jīng)存在了就不加。所以這種方式的過濾只保留第一個重復元素。 結果與上面的一樣 同時過濾兩個屬性 結

    2024年02月04日
    瀏覽(90)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包