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

java8 List根據(jù)元素對(duì)象屬性去重

這篇具有很好參考價(jià)值的文章主要介紹了java8 List根據(jù)元素對(duì)象屬性去重。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1.使用Collectors.collectingAndThen鏈?zhǔn)饺ブ?/p>

代碼:

public class Person {
    private String name;
    private Integer id;
    private Integer age;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", id=" + id +
                ", age=" + age +
                '}';
    }
}

main:

public class TestMap2 {
    public static void main(String[] args) {
        List<Person> people = new ArrayList<>();
        Person p111 = new Person();
        p111.setId(111);
        p111.setName("Yang");
        p111.setAge(31);
        people.add(p111);
        Person p112 = new Person();
        p112.setId(111);
        p112.setName("Yang");
        p112.setAge(31);
        people.add(p112);
        Person p113 = new Person();
        p113.setId(112);
        p113.setName("Liu");
        p113.setAge(22);
        people.add(p113);
        System.out.println(people);

        people = people.stream().collect(
                collectingAndThen(
                        toCollection(() -> new TreeSet<>(Comparator.comparing(Person::getId))), ArrayList::new));
        System.out.println(people);

    }
}

結(jié)果:

[Person{name='Yang', id=111, age=31}, Person{name='Yang', id=111, age=31}, Person{name='Liu', id=112, age=22}]
[Person{name='Yang', id=111, age=31}, Person{name='Liu', id=112, age=22}]

或者可以利用map也可以:

       people = people.stream().collect(
                collectingAndThen(
                        toMap(Person::getId,Function.identity(),(k1,k2)->k1), map->map.values().stream()
                                .collect(Collectors.toList())));

或:

        people = people.stream().collect(
                collectingAndThen(
                        toMap(Person::getId,Function.identity(),(k1,k2)->k1), map-> new ArrayList<>(map.values())));

或者不用鏈?zhǔn)揭部梢苑珠_:

Map<Integer,Person > storeAttrMap = people.stream().collect(Collectors.toMap(Person::getId, Function.identity(), (k1,k2)->k1));
        people = new ArrayList<>(storeAttrMap.values());

Collectors.collectingAndThen()

Collectors.collectingAndThen()?函數(shù)應(yīng)該最像?map and reduce?了,它可接受兩個(gè)參數(shù),第一個(gè)參數(shù)用于?reduce操作,而第二參數(shù)用于?map操作。

也就是,先把流中的所有元素傳遞給第一個(gè)參數(shù),然后把生成的集合傳遞給第二個(gè)參數(shù)來處理。

例如下面的代碼

把 [1,2,3,4] 這個(gè)集合傳遞給 v -> v * 2 lambda表達(dá)式,計(jì)算得出結(jié)果為[2,4,6,8]
然后再把 [2,4,6,8]傳遞給 Collectors.averagingLong 表達(dá)式,計(jì)算得出 5.0
然后傳遞給 s -> s * s lambda表達(dá)式,計(jì)算得到結(jié)果為 25.0
代碼示例:

@Test
public void collectingAndThenExample() {
    List<Integer> list = Arrays.asList(1, 2, 3, 4);
    Double result = list.stream().collect(Collectors.collectingAndThen(Collectors.averagingLong(v -> {
                System.out.println("v--" + v + "--> " + v * 2);
                return v * 2;
            }),
            s -> {
                System.out.println("s--" + s + "--> " + s * s);
                return s * s;
            }));
    System.out.println(result);
}

結(jié)果:

v--1--> 2
v--2--> 4
v--3--> 6
v--4--> 8
s--5.0--> 25.0
25.0

了解之后可以看一下

       people = people.stream().collect(
                collectingAndThen(
                        toMap(Person::getId,Function.identity(),(k1,k2)->k1), map->map.values().stream()
                                .collect(Collectors.toList())));

先將people轉(zhuǎn)成Map結(jié)構(gòu)Map<Integer,Person>結(jié)構(gòu),然后將這個(gè)map整體作為一個(gè)參數(shù)傳給第二個(gè)lambda表達(dá)式,輸入?yún)?shù)是第一步傳過來的map,然后將其轉(zhuǎn)化為L(zhǎng)ist,這個(gè)List就是最終的結(jié)果文章來源地址http://www.zghlxwxcb.cn/news/detail-522542.html

到了這里,關(guān)于java8 List根據(jù)元素對(duì)象屬性去重的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java8 list多屬性去重

    Java8 list多屬性去重

    大家好,我是三叔,很高興這期又和大家見面了,一個(gè)奮斗在互聯(lián)網(wǎng)的打工人。 在 Java 開發(fā)中,我們經(jīng)常會(huì)面臨對(duì) List 中的對(duì)象屬性去重的需求。然而,當(dāng)需要根據(jù)多個(gè)屬性來進(jìn)行去重時(shí),情況會(huì)稍微復(fù)雜一些。本篇博客將深入探討如何使用 Java 8 的 Stream API 來實(shí)現(xiàn) List 多屬

    2024年02月14日
    瀏覽(440)
  • JAVA8 獲取list集合中重復(fù)的元素和獲取去重?cái)?shù)據(jù)

    JAVA8 獲取list集合中重復(fù)的元素和獲取去重?cái)?shù)據(jù)

    1.java8獲取list集合中重復(fù)的元素 2.java8根據(jù)List對(duì)象屬性獲取重復(fù)數(shù)據(jù)和獲取去重后數(shù)據(jù) 2.1獲取重復(fù)數(shù)據(jù) 結(jié)果: 根據(jù)多個(gè)屬性獲取重復(fù)數(shù)據(jù),還在摸索中,歡迎大家來指點(diǎn)?。。。?! 2.2獲取去重后數(shù)據(jù) 結(jié)果:

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

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

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

    2024年01月20日
    瀏覽(431)
  • Java中List集合對(duì)象去重及按屬性去重的8種方法

    是大家最容易想到的,先把List數(shù)據(jù)放入Set,因?yàn)镾et數(shù)據(jù)結(jié)構(gòu)本身具有去重的功能,所以再將SET轉(zhuǎn)為L(zhǎng)ist之后就是去重之后的結(jié)果。這種方法在去重之后會(huì)改變?cè)械腖ist元素順序,因?yàn)镠ashSet本身是無序的,而TreeSet排序也不是List種元素的原有順序。 去重后的集合: [kobe, james,

    2024年04月15日
    瀏覽(842)
  • java 對(duì)象list使用stream根據(jù)某一個(gè)屬性轉(zhuǎn)換成map的幾種方式

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

    2024年02月13日
    瀏覽(97)
  • Java list集合中根據(jù)其中兩個(gè)字段去重

    可以使用Java 8的Stream API和Collectors.toSet()方法來實(shí)現(xiàn)根據(jù)其中兩個(gè)字段去重。 首先,使用Stream API將List轉(zhuǎn)換為Stream,然后使用distinct()方法進(jìn)行去重。distinct()方法默認(rèn)使用元素的equals()和hashCode()方法進(jìn)行去重。如果想要根據(jù)其中兩個(gè)字段進(jìn)行去重,需要重寫equals()和hashCode()方法

    2024年02月16日
    瀏覽(105)
  • java stream distinct根據(jù)list某個(gè)字段去重

    java stream distinct根據(jù)list某個(gè)字段去重,普通List簡(jiǎn)單去重: 很顯然這種滿足不了需求,我們List里的是實(shí)體對(duì)象,這里的是字符串。 首先創(chuàng)建了一個(gè)Student類,該類包含id、name、age三個(gè)字段,使用了注解@Data,我們想根據(jù)學(xué)生的name去重。 一、Stream流 + TreeSet(推薦) 根據(jù)學(xué)生的

    2024年01月17日
    瀏覽(304)
  • 【java】List對(duì)象集合去除特定對(duì)象的優(yōu)雅寫法(基于java8)

    【java】List對(duì)象集合去除特定對(duì)象的優(yōu)雅寫法(基于java8) 主要用的是 Java List.removeIf方法,該方法用于刪除所有滿足特定條件的數(shù)組元素,入?yún)⑵鋵?shí)是一個(gè)布爾值的表達(dá)式即可。 使用場(chǎng)景,用戶類中的性別字段有三個(gè),分別是男、女、未知。 當(dāng)前端要查詢:“男”時(shí),要求

    2024年02月16日
    瀏覽(91)
  • 使用java8 新特性stream流對(duì)List<Map<String, Object>>集合進(jìn)行遍歷、過濾、查詢、去重、排序、分組

    對(duì)于一個(gè)ListMapString, Object類型的數(shù)據(jù),可以使用Java 8的新特性stream流來進(jìn)行遍歷、過濾、查詢、去重、排序、分組等操作。 遍歷: 過濾: 查詢: 去重: 排序: 分組:

    2024年02月10日
    瀏覽(105)
  • java8 list對(duì)象string字符串求和

    Java 8 中可以使用 Stream API 和 reduce() 方法來對(duì) List 中的字符串進(jìn)行求和。 舉個(gè)例子,假設(shè)你有一個(gè) List 叫做 \\\"numbers\\\",你可以這樣求和: 或者這樣求和 這樣得到的結(jié)果就是 \\\"12345\\\"。 在這個(gè)例子中,我們使用 reduce() 方法對(duì) List 中的所有字符串進(jìn)行求和,其中第一個(gè)參數(shù)是初始值

    2024年02月15日
    瀏覽(32)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包