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

jdk8對象列表使用stream流基于某個字段(或某些條件)實現(xiàn)去重

這篇具有很好參考價值的文章主要介紹了jdk8對象列表使用stream流基于某個字段(或某些條件)實現(xiàn)去重。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

直接上代碼:(實現(xiàn)了去重加排序的效果)

//換行只是為了方便看
userList.stream().collect(Collectors.collectingAndThen(Collectors
.toCollection(() -> new TreeSet<>(Comparator.comparing(User::getAge))), ArrayList::new));

comparing(比較器)定義的就是去重的所使用的字段,可以使用匿名內(nèi)部類來寫更復(fù)雜的去重邏輯。
我們看看單參數(shù)的比較器方法實現(xiàn);如下,可以發(fā)現(xiàn)內(nèi)部實際調(diào)用效果類似于(a,b)->a.getXXX.conpareTo(b.getXXX)。
因為Function.apply(field)實際上是獲取當(dāng)前對象的field字段的值。

    public static <T, U extends Comparable<? super U>> Comparator<T> comparing(
            Function<? super T, ? extends U> keyExtractor)
    {
        Objects.requireNonNull(keyExtractor);
        return (Comparator<T> & Serializable)
            (c1, c2) -> keyExtractor.apply(c1).compareTo(keyExtractor.apply(c2));
    }

實際的去重是通過TreeSet來實現(xiàn)的,外部的其他操作本質(zhì)上是遍歷傳參,創(chuàng)建TreeSet并指定比較器,最后收集結(jié)果集。

驗證可用性:

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

public class User {
	private String name;
	private int age;

	public User(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public boolean equals(Object o) {
		if (this == o) return true;
		if (o == null || getClass() != o.getClass()) return false;
		User user = (User) o;
		return age == user.age && Objects.equals(name, user.name);
	}

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

	@Override
	public String toString() {
		return "User{" +
				"name='" + name + '\'' +
				", age=" + age +
				'}';
	}

	public static void main(String[] args) {
		User user=new User("藏三",18);
		User user1=new User("藏三1",19);
		User user2=new User("藏三2",28);
		User user3=new User("藏三3",29);
		User user4=new User("藏三4",18);
		User user5=new User("藏三5",38);
		User user6=new User("藏三6",48);
		List<User> userList=new ArrayList<>();
		userList.add(user);
		userList.add(user1);
		userList.add(user2);
		userList.add(user3);
		userList.add(user4);
		userList.add(user5);
		userList.add(user6);
		userList.stream().forEach(System.out::println);
		ArrayList<User> collect = userList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(User::getAge))), ArrayList::new));
//		//按照每十年一個年齡段,在各個年齡段里面要一個人
//		ArrayList<User> collect = userList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o->{
//			return o.getAge()/10;
//		}))), ArrayList::new));
		System.out.println("--------------------------");
		collect.stream().forEach(System.out::println);
	}
}

結(jié)果:(藏三4因為年齡和第一個一樣,就被過濾掉了,并且數(shù)據(jù)也按照age進行了排序,升序)
jdk8對象列表使用stream流基于某個字段(或某些條件)實現(xiàn)去重,java,java-ee
注解掉代碼的執(zhí)行結(jié)果:(符合去重邏輯,每個年齡段只有一個人)
jdk8對象列表使用stream流基于某個字段(或某些條件)實現(xiàn)去重,java,java-ee

另外,HashSet不太適合用來做自定義去重,因為HashSet的去重是通過類的equals和hashCode方法實現(xiàn)的。文章來源地址http://www.zghlxwxcb.cn/news/detail-666120.html

到了這里,關(guān)于jdk8對象列表使用stream流基于某個字段(或某些條件)實現(xiàn)去重的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • JDK8新特性(一)集合之 Stream 流式操作

    JDK8新特性(一)集合之 Stream 流式操作

    ?????? 首先我們應(yīng)該知道:Stream流的出現(xiàn),主要是用在集合的操作上。在我們?nèi)粘5墓ぷ髦?,?jīng)常需要對集合中的元素進行相關(guān)操作。諸如:增加、刪除、獲取元素、遍歷。 ??????? 最典型的就是集合遍歷了。接下來我們先舉個例子來看看 JDK8 Stream流式操作出現(xiàn)之前,

    2024年01月23日
    瀏覽(22)
  • java 使用stream累加對象中某個屬性的值并返回總和

    假設(shè)有一個包含對象的List列表,每個對象都有一個屬性value,可以使用Java 8中的Stream流來累加對象中某個屬性的值并返回總和。以下是一些可能的實現(xiàn)方法: 1、使用reduce方法: 這里使用了mapToInt方法將每個對象轉(zhuǎn)換為其value屬性的值,然后使用reduce方法將這些值累加起來。

    2024年02月11日
    瀏覽(22)
  • JDK8 新特性 Stream API 進階 (結(jié)合案例詳解--通透--講清)

    JDK8 新特性 Stream API 進階 (結(jié)合案例詳解--通透--講清)

    ??我親愛的各位大佬們好?????? ?? 本篇文章記錄的為 JDK8 新特性 Stream API 進階 相關(guān)內(nèi)容,適合在學(xué)Java的小白,幫助新手快速上手,也適合復(fù)習(xí)中,面試中的大佬??????。 ?? 如果文章有什么需要改進的地方還請大佬不吝賜教?????? ????? 個人主頁 : 阿千弟 ??

    2024年02月06日
    瀏覽(19)
  • JDK8中的新特性(Lambda、函數(shù)式接口、方法引用、Stream)

    JDK8中的新特性(Lambda、函數(shù)式接口、方法引用、Stream)

    1.1 關(guān)于Java8新特性簡介 Java 8 (又稱為 JDK 8或JDK1.8) 是 Java 語言開發(fā)的一個主要版本。 Java 8 是oracle公司于2014年3月發(fā)布,可以看成是自Java 5 以來 最具革命性 的版本。Java 8為Java語言、編譯器、類庫、開發(fā)工具與JVM帶來了大量新特性。 特性: 速度更快 代碼更少(增加了新的語法

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

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

    2024年01月17日
    瀏覽(304)
  • stream流的使用-獲取list集合中對象的單個字段list集合,進行累加操作

    場景及代碼案例源于實際項目 現(xiàn)存一list集合,其中保存了投資人的信息。 Person (name, age, money rateOfReturn) 其中的money表示投資人現(xiàn)有資產(chǎn),rateOfReturn表示投資年回報率 需求: 1.計算投資人年齡之和; 2.根據(jù)現(xiàn)有資產(chǎn)及投資回報率,計算所有投資人一年后的資產(chǎn)總和; 實體

    2023年04月22日
    瀏覽(95)
  • java用stream根據(jù)實體的某個屬性對列表進行排序

    用stream流根據(jù)實體的某個屬性對列表進行排序 假設(shè)有一個實體類 Person,包含兩個屬性 name 和 age,你可以使用 stream 流的 sorted() 方法來按照某兩個字段進行排序。以下是一個示例代碼: 在上述代碼中,我們將 personList 轉(zhuǎn)換成流后,調(diào)用了 sorted() 方法,并且使用 Comparator 的

    2024年02月06日
    瀏覽(91)
  • 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)
  • 已解決:Vue改變數(shù)據(jù)后界面不自動渲染,Vue中使用v-for遍歷對象數(shù)組,當(dāng)給其中某個元素對象重新賦值之后,頁面組件列表沒有渲染更新。

    問題如標(biāo)題所說,Vue中使用v-for遍歷對象數(shù)組,當(dāng)給數(shù)組其中某個元素對象重新賦值之后,頁面組件列表沒有及時更新渲染,而是在頁面進行了其他的渲染操作以后列表才更新出來新的數(shù)據(jù),那同樣給對象內(nèi)的屬性值賦值也可能存在不渲染的情況,一并解決,尤其發(fā)生在網(wǎng)絡(luò)

    2024年02月06日
    瀏覽(21)
  • 【Java 8 新特性】獲取對象列表中的某個屬性組成的列表

    【Java 8 新特性】獲取對象列表中的某個屬性組成的列表

    1、用法示例 獲取list中所有對象的某個屬性 2、詳細案例 UserEntity.java Test.java 輸出結(jié)果: 1、Java 8 Stream 基本介紹 Java 8 API添加了一個新的抽象稱為流Stream,可以讓你以一種聲明的方式處理數(shù)據(jù)。 Stream 使用一種類似用 SQL 語句從數(shù)據(jù)庫查詢數(shù)據(jù)的直觀方式來提供一種對 Java 集合

    2024年02月10日
    瀏覽(31)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包