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...