Java實現名字按拼音排序和多條件排序

Java實現名字按拼音排序和多條件排序

  1. 拼音排序
@Test
public void nameSortTest() {
	String [] nameArray = {"張三", "李四", "李華", "王五", "張偉", "陳晨"};
	List<String> nameList = new ArrayList<>(nameArray.length);
	Collections.addAll(nameList, nameArray);
	nameList = nameList.stream().sorted((name1, name2) -> {
		Comparator cmp = Collator.getInstance(java.util.Locale.CHINA);
		return cmp.compare(name1, name2);
	}).collect(Collectors.toList());
	System.out.println(nameList);
	// [陳晨, 李華, 李四, 王五, 張三, 張偉]
}
  1. 多條件排序
    實現User先按status排序,再按name, 最後按id排序
class User {
	private Integer id;
	private String name;
	private Boolean status;
    
	public User(Integer id, String name, Boolean status) {
		this.id = id;
		this.name = name;
		this.status = status;
	}
    
	public Integer getId() {
		return id;
	}
    
	public void setId(Integer id) {
		this.id = id;
	}
    
	public String getName() {
		return name;
	}
    
	public void setName(String name) {
		this.name = name;
	}
    
	public Boolean getStatus() {
    	return status;
	}
    
	public void setStatus(Boolean status) {
		this.status = status;
	}
    
	@Override
	public String toString() {
		return "User{" +
				", status=" + status +
				", name='" + name + '\'' +
				", id=" + id +
				'}' +"\n";
	}
}
@Test
public void multipleConditionSortTest() {
    
    String [] nameArray = {"張三", "李四", "李華", "王五", "張偉", "陳晨", "王五"};
	List<User> userList = new ArrayList<>(nameArray.length);
	for (int i = 0; i < nameArray.length; i++) {
		userList.add(new User(i,nameArray[i], i % 3 == 0 ));
	}
    userList = userList.stream().sorted((user1, user2) -> {
            
    	if (!user1.getStatus().equals(user2.getStatus())) {
   			return user1.getStatus().compareTo(user2.getStatus());
   		} else if (!user1.getName().equals(user2.getName())) {
   			Comparator cmp = Collator.getInstance(java.util.Locale.CHINA);
            return cmp.compare(user1.getName(), user2.getName());
        } else  {
            user1.getId().compareTo(user2.getId());
        }
                
    }).collect(Collectors.toList());
	System.out.println(userList);
    // [User{, status=false, name='陳晨', id=5}
	// ,User{, status=false, name='李華', id=2}
	// ,User{, status=false, name='李四', id=1}
	// ,User{, status=false, name='張偉', id=4}
	// ,User{, status=true, name='王五', id=3}
	// ,User{, status=true, name='王五', id=6}
	// ,User{, status=true, name='張三', id=0}
	// ]
}

順便總結幾種Array轉list的方法

String [] nameArray = {"張三", "李四", "李華", "王五", "張偉", "陳晨"};
List<String> nameList = new ArrayList<>(nameArray.length);
for (String name: nameArray) {
    nameList.add(name);
}
String [] nameArray = {"張三", "李四", "李華", "王五", "張偉", "陳晨"};
List<String> nameList = new ArrayList<>(Arrays.asList(nameArray));
String [] nameArray = {"張三", "李四", "李華", "王五", "張偉", "陳晨"};
List<String> nameList = Arrays.stream(nameArray).collect(Collectors.toList());
String [] nameArray = {"張三", "李四", "李華", "王五", "張偉", "陳晨"};
List<String> nameList = new ArrayList<>(nameArray.length);
Collections.addAll(nameList, nameArray);
發佈了74 篇原創文章 · 獲贊 27 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章