package com.pers.Stream; import java.util.*; import java.util.stream.Collectors; import java.util.stream.IntStream; /** * 數組去重demo * * @author hoobey */ public class RemoveDuplicatedDataTest { public static void main(String[] args) { String[] strArr = new String[]{"abc", "ab", "abc"}; //Arrays.asList(T...a) 接受的是一個泛型的變長參數 而基本類型是沒法被泛型化的 可以使用基本包裝類 List<String> strList = Arrays.asList(strArr);//String[] --> List<String> for (int i = 0; i < strList.size(); i++) {//由於List是 有序 可重複的 因此並不會去掉重複內容 System.out.println(strList.get(i)+",");//java.io.PrintStream println()打印對象時會自動調用其toString() } int[] intArr = {1, 2, 1, 3, 2, 4}; List list = Arrays.asList(intArr);//List<int[]>不行! --> 原理是List中只能存儲對象! for (int i = 0; i < list.size(); i++) { Object obj = list.get(i); System.out.println("下標i=" + i + ",存儲的內容:" + obj);//[I@14ae5a5 地址 int[] temp = (int[]) obj;//強轉一下 獲得地址中指向的數據 for (int j = 0; j < temp.length; j++) { System.out.print(temp[j]+","); } } // 把數組先變成List,List是繼承Collection的接口,因此就能夠把轉換後的list給addAll() /* List intList = new ArrayList(); for (int i = 0; i < intArr.length; i++) { intList.add(intArr[i]); }*/ List<Integer> intList = IntStream.of(intArr).boxed().collect(Collectors.toList()); //要求各位把intArr中重複的數字去掉,僅留下相互不重複的數字 核心就是Set集合存儲的是 無序不重複的數據 Set dupDataRemoved = new HashSet(intList); // dupDataRemoved.addAll(intList); // Collections.addAll(dupDataRemoved, intList); System.out.println(); System.out.print("去重後的數據是:"); for(Iterator it = dupDataRemoved.iterator(); it.hasNext(); ){ System.out.print(it.next() + ","); } //========================================= /*若是數組存儲的元素是對象,那麼能夠直接用Arrays.aslist() 但若是是基本類型就須要使用相應的Stream來轉。*/ String[] strArr2 = {"xiaoming", "xiaoyu", "xiaoming", "xiaoming", "xiaoyu"}; List<String> list1 = Arrays.asList(strArr2);//List<String> Set strSet = new HashSet(list1);//構造一個包含指定 collection 中的元素的新 set for(Iterator it = strSet.iterator(); it.hasNext(); ){ System.out.print(it.next() + ","); } } }
abc,java
ab,數組
abc,函數
下標i=0,存儲的內容:[I@14ae5a5優化
1,2,1,3,2,4,spa
去重後的數據是:1,2,3,4,=========================================code
xiaoyu,xiaoming,對象
Process finished with exit code 0 blog
/*在Stream API中,一個流基本上表明一個元素序列,Stream API提供了豐富的操做函數來計算這些元素。之前咱們在開發業務應用時,一般不少操做的實現是這樣作的:咱們使用循環對集合作遍歷,針對集合中的元素實現各類操做,定義各類變量來實現目的,這樣咱們就獲得了一大堆醜陋的順序代碼。 若是咱們使用Stream API作一樣的事情,使用Lambda表達式和其它函數進行抽象,可使得代碼更易於理解、更爲乾淨。有了這些抽象,還能夠作一些優化,好比實現並行等。*/ @Test public void syso(){ IntStream rangeStream = IntStream.range(0, 10); List<Integer> list = rangeStream.boxed().collect(Collectors.toList()); Iterator<Integer> it = list.iterator(); while (it.hasNext()){ System.out.print(it.next()+",");//0,1,2,3,4,5,6,7,8,9, } }
* 把int數組中的重複數據刪除掉?---HashSet存儲的數據都是對象,不能存儲相同的元素 int[] intArr = new int[]{1,2,2,3,1,134,22,1,3,123,563,67,3,134,123,67,4,06,-1,1}; //第一步,轉化int數組爲int流 IntStream.of(intArr) //在Java中,8種基本數據類型都有對應的包裝類 //boolean;char;byte,short,int,long;float,double //要將存儲的int轉換爲Integer對象(底層原理:HashSet存儲的數據都是對象,不能存儲相同的元素) IntStream.of(intArr).boxed() --> Stream中存儲Integer對象 //Stream --> List List intList = IntStream.of(intArr).boxed().collect(Collectors.toList()); //第二步,3種方式去重: //HashSet的構造方法 new HashSet(intList); //調用HashSet.addAll(Collection c); Collection接口 -繼承-> List接口 --> AbstractList --> ArrayList new HashSet().addAll(intList); //Collections Arrays HashSet hashset = new HashSet(); Collections.addAll(hashset, intList); //迭代器Iterator,Collection.iterator()方法 iterator.next(); */ public class RemoveSame { public static void main(String[] args){ int[] intArr = {1, 2, 3, 43, 2, 4, 1, 5765, 23, 12, 6, 1, 2, 56, 2, 3, 2, 3, 7, 8, 128843, 1}; List<Integer> intList = IntStream.of(intArr).boxed().collect(Collectors.toList()); Set dupDataRemoved = new HashSet(intList); for (Iterator it = dupDataRemoved.iterator(); it.hasNext(); ) { System.out.print(it.next() + ","); } /*Arrays.asList([]); 若是數組存儲的元素是對象,那麼能夠直接用Arrays.aslist() 但若是是基本類型就須要使用相應的Stream來轉。*/ } }