将一个字符串转换成无重复的有序列表,方法很多,但步骤应该主要就是先转换成String数组,再去重,最后转换成有序列表。
而其实每步都有很多种方式,如去重可以直接用for循环,也可以用hashSet,当然如果用treeSet去重并排序,一步到位实现了,代码相当简洁。
String[] strs = str.split(","); List<String> arlList = Arrays.asList(strs); TreeSet treeSet = new TreeSet(arlList); System.out.println(treeSet);
当然,如果treeSet默认排序达不到要求,可以实现compare方法,实现排序逻辑。实例代码如下所示:
package com.bijian.study; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.TreeSet; /** * 用Java集合实现将一个字符串转换成无重复的有序列表 * 1.采用分隔符将字符串转换成String数组 * 2.去重 * a.treeSet去重并排序(一步到位),如果默认排序达不到要求,可以实现compare方法,实现排序逻辑 * b.hashSet去重 * 3.转换成有序列表,用Collections.sort排序 */ public class CollectionDemo { private final static String str = "张三,李四,王五,张三,李国中,陈小小,李新大,王五,王五,刘大姐,bijian,zhangshan,lisi"; public static void processMethod0() { String[] strs = str.split(","); List<String> arlList = Arrays.asList(strs); TreeSet treeSet = new TreeSet(arlList); System.out.println(treeSet);//[bijian, lisi, zhangshan, 刘大姐, 张三, 李四, 李国中, 李新大, 王五, 陈小小] } public static void processMethod1() { String[] strs = str.split(","); List<String> arlList = Arrays.asList(strs); //TreeSet treeSet = new TreeSet(arlList); TreeSet<String> treeSet = new TreeSet<String>(arlList){ public int compare(String str1, String str2) { return str1.compareTo(str2); } }; List<String> resList = new ArrayList<String>(); resList.addAll(treeSet); System.out.println(resList);//[bijian, lisi, zhangshan, 刘大姐, 张三, 李四, 李国中, 李新大, 王五, 陈小小] } public static void processMethod2() { String[] strs = str.split(","); List<String> arlList = Arrays.asList(strs); Set<String> hashSet = new HashSet<String>(arlList); /* 将Set集合转为List,这样获得的list并不能有序排列*/ List<String> resList = new ArrayList<String>(hashSet); /*将list有序排列*/ Collections.sort(resList, new Comparator<String>() { public int compare(String str1, String str2) { return str1.compareTo(str2); } }); System.out.println(resList);//[bijian, lisi, zhangshan, 刘大姐, 张三, 李四, 李国中, 李新大, 王五, 陈小小] } public static void main(String[] args) { System.out.println("processMethod0:"); processMethod0(); System.out.println("processMethod1:"); processMethod1(); System.out.println("processMethod2:"); processMethod2(); } }
运行结果:
processMethod0: [bijian, lisi, zhangshan, 刘大姐, 张三, 李四, 李国中, 李新大, 王五, 陈小小] processMethod1: [bijian, lisi, zhangshan, 刘大姐, 张三, 李四, 李国中, 李新大, 王五, 陈小小] processMethod2: [bijian, lisi, zhangshan, 刘大姐, 张三, 李四, 李国中, 李新大, 王五, 陈小小]