list字串去重的三種方式 list去重 字串去重
阿新 • • 發佈:2019-02-10
list字串去重的三種方式
求List< String >中元素去重,並且求出去重後的個數
- 採用原始的for迴圈遍歷
- 採用set集合的特點
- 採用Java8流處理方式
package sun.rain.amazing.stream;
import org.junit.Test;
import java.util.*;
import java.util.stream.Collectors;
/**
* Created by sunRainAmazing on SUN_RAIN_AMAZING
* @author sunRainAmazing
*/
public class ListCaseOperate {
private static List<String> list3;
static{
//注意 Arrays.asList的陷阱 返回的並不是 java.util.ArrayList
//進行remove操作時會報錯
// list3 =
// Arrays.asList("tom","com","boss"
// ,"boss","jerry","jerry");
list3 = new ArrayList<String>(
Arrays.asList("tom" ,"com","boss","boss","jerry","jerry"));
}
/**
* 將 list3 的資料進行去重操作 -- 採用 for迴圈判斷
* 若直接只採用 Arrays.asList進行初始化
* 不支援 remove()操作 UnsupportedOperationException
*
* 這是因為 Arrays.asList返回的 ArrayList
* 並不是java.util.ArrayList,
* 而是在Arrays類中重新定義的一下內部類ArrayList
* 這個內部類 ArrayList並沒有重寫remove方法。
* 解決方式:
* List<String> list3 =
* new ArrayList<String>
* (Arrays.asList("tom","com","jerry"));
*
* E remove(int index)
* 移除列表中指定位置的元素(可選操作)。
* 將所有的後續元素向左移動(將其索引減 1)。
* 返回從列表中移除的元素。
*/
@Test
public void getDistinctByFor(){
List<String> list = list3;
for(int i=0; i<list.size(); i++){
for(int j=i+1; j<list.size(); j++){
if(list.get(i).equals(list.get(j))){
list3.remove(i); //注意這裡是list3
}
}
}
System.out.println(list3);
System.out.println(list3.size());
}
/**
* 將 list3 的資料進行去重操作 -- 採用Set去重
*/
@Test
public void getDistinctBySet(){
Set<String> set = new HashSet<>();
set.addAll(list3);
System.out.println(set);
System.out.println(set.size());
}
/**
* 將 list3 的資料進行去重操作 -- 採用 Stream 去重
*/
@Test
public void getDistinctByStream(){
System.out.println(list3.stream()
.distinct()
.collect(Collectors.toList()));
System.out.println(list3.stream()
.distinct()
.count());
}
}