将一个字符串转换成无重复的有序列表,方法很多,但步骤应该主要就是先转换成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, 刘大姐, 张三, 李四, 李国中, 李新大, 王五, 陈小小]