List去重及使用jdk8語法操作list去重

2021-10-05 19:35:33 字數 3152 閱讀 3697

list是有序的,可以重複的。set是無序的,不可以重複的。list去重,如果t是基本型別的,只需要將list轉成set就可以去重;如果t是物件型別,那麼需要重新equals()和hashcode()方法。

假如有乙個list集合[simon, kevin, lucy, kevin, lily],去掉其中重複的元素kevin

list

list =

newarraylist

<

>()

;list.

add(

"simon");

list.

add(

"kevin");

list.

add(

"lucy");

list.

add(

"kevin");

list.

add(

"lily"

);

通過list轉set去重,然後存到乙個新的list集合list3裡面

set

set =

newhashset

<

>

(list)

;list

list3 =

newarraylist

<

>

(set)

;system.out.

println

("list3="

+list3)

;

這樣去重後的問題:新的集合lis3t和原來的list集合裡面元素的順序不一致

要讓去重後的list集合和原來的list集合一致,可以如下操作:

先foreache list集合,然後去set.add()判斷,如果add()方法返回為true便給新的list集合去新增這個元素。

具體的實現**如下:

set

set2 =

newhashset

<

>()

;list

list4 =

newarraylist

<

>()

;for

(string str : list)

}system.out.

println

("list4="

+list4)

;

list

list2 = list.

stream()

.distinct()

.collect

(collectors.

tolist()

);system.out.

println

("list2="

+list2)

;

這樣操作後新的list集合list2的順序和list裡面的順序一致

物件型別,需要重新equals()和hashcode()方法,才能夠判斷出來兩個物件是同乙個物件,然後給去重。

public

class

user

public

void

setname

(string name)

public

intgetage()

public

void

setage

(int age)

@override

public string tostring()

public

user

(string name,

int age)

@override

public

inthashcode()

@override

public

boolean

equals

(object obj)

}

需要去重的list集合list< user >:

list

list =

newarraylist

()};

system.out.

println

("list="

+list)

;

set

set =

newhashset

<

>

(list)

;system.out.

println

(set)

;list

list3 =

newarraylist

<

>()

;list3.

addall

(set)

;system.out.

println

("list3="

+list3)

;

這樣操作是去重了,但是集合list3的順序和集合list的不一致

要讓去重後的集合和list集合順序一致,可以如下操作:

set

set2 =

newhashset

<

>()

;list

list4 =

newarraylist

<

>()

;for

(user user : list)

}system.out.

println

("list4="

+list4)

;

重寫equals()和hashcode()方法

list

list2 = list.

stream()

.distinct()

.collect

(collectors.

tolist()

);system.out.

println

("list2="

+list2)

;

關於jdk8使用stream去重

1.使用distinct 去重 distinct是stream自帶方法,根據hashcode和equals 方法進行去重,會保留第一次出現資料。示例 list.stream distinct collect collectors.tolist 2.使用filter filter是stream自帶的篩...

jdk8中forEach使用問題

實話說,jdk8出來好久了,公司一直用的還是jdk7,沒有公升級,最近終於公升級到jdk8了,所以來自己改改 使用jdk8中的新特性,最簡單的foreach先來試試 測試 如下 public static void testjdk8foreach 2 jdk8 foreach aslist.fore...

JDK8中Optional的方法使用

1.optional.of 或者optional.ofnullable 建立optional物件,差別在於of不允許引數是null,而ofnullable則無限制。test public void testoptional 2.ispresent 判斷值是否存在 ispresent判斷值是否存在 s...