1. 程式人生 > >list字串去重的三種方式 list去重 字串去重

list字串去重的三種方式 list去重 字串去重

list字串去重的三種方式

求List< String >中元素去重,並且求出去重後的個數

  1. 採用原始的for迴圈遍歷
  2. 採用set集合的特點
  3. 採用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()); } }