【JAVA8】Set排序四种写法-倒序

【JAVA8】Set排序四种写法-倒序

工作中遇到,写了很久以前的写法,师兄给了很多建议,于是整理了一下。孔子曰:“你知道茴香豆的茴字有几种写法吗?”

首先,要知道Set的特性是有序不重复,Jdk中使用了HashMap的Key作为Set的容器。

第一部分,基本类型&String

第一种,平常的写法:

public class App {

public static void main( String[] args ) {

Set set = new HashSet<>();

set.add("1");

set.add("2");

set.add("5");

set.add("4");

set.add("3");

System.out.println(set.toString());

Set sortSet = new TreeSet(new Comparator() {

@Override

public int compare(String o1, String o2) {

return o2.compareTo(o1);//降序排列

}

});

sortSet.addAll(set);

System.out.println(sortSet.toString());

}

}

第二种,lambda:

public class App

{

public static void main( String[] args ) {

Set set = new HashSet<>();

set.add("2");

set.add("1");

set.add("5");

set.add("3");

set.add("4");

System.out.println(set.toString());

Set sortSet = new TreeSet((o1, o2) -> o2.compareTo(o1));

sortSet.addAll(set);

System.out.println(sortSet.toString());

}

}

第三种:JDK api

public class App

{

public static void main( String[] args ) {

Set set = new HashSet<>();

set.add("1");

set.add("2");

set.add("3");

set.add("5");

set.add("4");

System.out.println(set.toString());

Set sortSet = new TreeSet(Comparator.reverseOrder());

sortSet.addAll(set);

System.out.println(sortSet.toString());

}

}

第四种:java8流的方式:

public class App

{

public static void main( String[] args ) {

Set set = new HashSet<>();

set.add("1");

set.add("2");

set.add("3");

set.add("4");

set.add("5");

System.out.println(set.toString());

//这里后续用有序的list处理即可,因为流中进行了倒序处理,收集成set后会重排

List collect = set.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());

System.out.println(collect);

}

}

第二部分,对象排序

package stream;

import java.util.HashSet;

import java.util.Set;

import java.util.TreeSet;

/**

* 事例2,对象排序

*/

public class Test2 {

public static void main( String[] args ) {

PersonObj person = new PersonObj(1L,"A",10);

PersonObj person1 = new PersonObj(2L,"B",20);

PersonObj person2 = new PersonObj(3L,"CC",30);

PersonObj person3 = new PersonObj(4L,"DD",40);

PersonObj person4 = new PersonObj(5L,"EE",50);

PersonObj person5 = new PersonObj(6L,"FF",60);

//对象组装,组装后内容无序

Set set = new HashSet<>();

set.add(person3);

set.add(person4);

set.add(person5);

set.add(person);

set.add(person1);

set.add(person2);

System.out.println(set.toString());

//第一种方式,Person类实现 Comparable并重写compareTo方法

//set = new TreeSet<>(set);

//System.out.println(set.toString());

//第二种方式

TreeSet objects = new TreeSet<>(((o1, o2) ->Integer.compare(o2.getAge(), o1.getAge())));

objects.addAll(set);

System.out.println(objects);

}

}

/**

* 被排序的对象实现Comparable

*/

class PersonObj implements Comparable{

private Long id;

private String name;

private int age;

@Override

public int compareTo(Object o) {

PersonObj student =(PersonObj)o;

//将当前this.age值与传入的参数中的o.age对比,返回正数则升序,返回负数则降序

return Integer.compare(student.age, this.age);

}

public PersonObj(Long id, String name, int age) {

this.id = id;

this.name = name;

this.age = age;

}

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString() {

return this.name+"_"+this.id+"_"+this.age;

}

@Override

public int hashCode() {

return super.hashCode();

}

@Override

public boolean equals(Object obj) {

return super.equals(obj);

}

}

相关文章