list排序,list去重
阿新 • • 發佈:2019-01-31
package com.ck.test; import java.text.Collator; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Random; import java.util.Set; import org.junit.Assert; import org.junit.Test; import com.ck.test.modal.Student; import com.ck.test.util.ListSort; /* * 對list去重 * */ public class TestList { //去除set中重複資料的方法 private static Set<Student> removeDuplicate(Set<Student> set) { Map<String, Student> map = new HashMap<String, Student>(); Set<Student> tempSet = new HashSet<Student>(); for(Student p : set) { if(map.get(p.getName()) == null ) { map.put(p.getName(), p); } else { tempSet.add(p); } } set.removeAll(tempSet); return set; } public static String outCollection(Collection coll) { StringBuffer sb = new StringBuffer(); for (Object obj : coll) { sb.append(obj + "," ); } System.out.println(sb.toString()); return sb.toString(); } /* * 對list去重 list with dup:[1, 2, 3, 1] list without dup:[3, 2, 1] */ @Test public void distinctListValue() { List<String> listWithDup = new ArrayList<String>(); listWithDup.add("1"); listWithDup.add("2"); listWithDup.add("4"); listWithDup.add("3"); listWithDup.add("1"); List<String> listWithoutDup = new ArrayList<String>(new HashSet<String>(listWithDup)); System.out.println("list with dup:" + listWithDup); System.out.println("list without dup:" + listWithoutDup); System.out.println("list去重後(去掉重複的值,並保留重複值中一個值及其他不重複的值/排序) :\n" + (new ListSort<String>()).distinctListValue(listWithDup)); Collections.sort(listWithoutDup); Collections.reverse(listWithoutDup); //按照age降序 23,22 System.out.println(listWithoutDup); } @Test public void test2() { List<String> list = new ArrayList(); list.add("王碩"); list.add("劉媛媛"); list.add("李明1"); list.add("李明2"); list.add("李明"); list.add("劉迪"); list.add("劉布2"); list.add("李明"); list.add("劉布8"); list.add("劉布"); list.add("劉布"); list.add("3"); list.add("4"); list.add("4"); list.add("2"); list.add("4"); list.add("1"); System.out.println((new ListSort<String>()).distinctListValue(list)); for(int i=0;i<list.size();i++) { System.out.print(list.get(i) +","); } System.out.println(""); //升序 Collections.sort(list,Collator.getInstance(java.util.Locale.CHINA));//注意:是根據的漢字的拼音的字母排序的,而不是根據漢字一般的排序方法 for(int i=0;i<list.size();i++) { System.out.print(list.get(i) +","); } System.out.println(""); //降序 Collections.reverse(list);//不指定排序規則時,也是按照字母的來排序的 for(int i=0;i<list.size();i++) { System.out.print(list.get(i) +","); } } /** * 取出list中重複的Student物件 */ @Test public void ObtainListEquals() { // 原始資料 List<Student> list = new ArrayList<>(); // 重複資料 List<Student> list2 = new ArrayList<>(); // 填充 for (int i = 0; i < 10; i++) { list.add(new Student(i, "_" + i, 18 + i)); Random random = new Random(); if (random.nextBoolean()) { list.add(new Student(i, "_" + i, 18 + i)); } } // 使用hashset去重複,set為重複的集合,可以通過new ArrayList(set)轉換成list HashSet<Student> set = new HashSet<>(); // 去掉重複的值,只保留其他不重複的物件 for (Student student : list) { boolean add = set.add(student); if (!add) { list2.add(student); } } List<Student> listWithoutDup = new ArrayList<Student>(new HashSet<Student>(list)); System.out.println("list初始化:\n" + list); System.out.println("list去重後(重複的物件):\n" + list2); System.out.println("list去重後(去掉重複的值,並保留重複值中一個值及其他不重複的值):\n" + listWithoutDup); System.out.println("list去重後(去掉重複的值,並保留重複值中一個值及其他不重複的值/排序) :\n" + (new ListSort<Student>()).sortObjDistinctList(list, "getId", "desc")); ListSort<Student> listSort= new ListSort<Student>(); // 排序 listSort.Sort(listWithoutDup, "getId", ""); // listSort.Sort(listWithoutDup, "getId", ""); System.out.println("list去重後(去掉重複的值,並保留重複值中一個值及其他不重複的值) 排序:\n" + listWithoutDup); Set<Student> set2 = new HashSet<Student>(list); System.out.println("list without dup:" + removeDuplicate(set2)); // 比較 Assert.assertEquals(list.size(), list2.size() + set.size()); } }