# 用Comparator排序和分组

Test实体

import java.util.Objects;

/**
* @author gallen
* @description
* @date 2018/11/16
* @time 18:57
*/
public class Test {

Integer id;

String name;

Integer age;

Integer sex;

public Test(Integer id, String name, Integer age, Integer sex) {
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
}

public Integer getId() {
return this.id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return this.name;
}

public void setName(String name) {
this.name = name;
}

public Integer getAge() {
return this.age;
}

public void setAge(Integer age) {
this.age = age;
}

public Integer getSex() {
return this.sex;
}

public void setSex(Integer sex) {
this.sex = sex;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Test)) return false;
Test test = (Test) o;
return Objects.equals(this.getId(), test.getId()) &&
Objects.equals(this.getName(), test.getName()) &&
Objects.equals(this.getAge(), test.getAge()) &&
Objects.equals(this.getSex(), test.getSex());
}

@Override
public int hashCode() {
return Objects.hash(this.getId(), this.getName(), this.getAge(), this.getSex());
}

@Override
public String toString() {
return "Test{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", sex=" + sex +
'}';
}
}

import java.util.Objects;

/**
* @author gallen
* @description
* @date 2018/11/16
* @time 18:57
*/
public class Demo {

public static void main(String[] args) {
List<Test> list = Lists.newArrayList();
//排序
Collections.sort(list, new Comparator<Test>() {
@Override
public int compare(Test o1, Test o2) {
return o1.id.compareTo(o2.id);
}
});
list1.stream().forEach(test -> {
System.out.println("list1 = " + test.toString());
});
//分组
List<List<Test>> list2 = divider(list, new Comparator<Test>() {
@Override
public int compare(Test o1, Test o2) {
if (o1.age.intValue() > 30 && o2.age.intValue() > 30) {
return 0;
} else if (o1.age.intValue() > 30 && o2.age.intValue() <= 30) {
return 1;
} else if (o1.age.intValue() <= 30 && o2.age.intValue() > 30) {
return -1;
} else if (o1.age.intValue() <= 30 && o2.age.intValue() <= 30) {
return 0;
}else{
return 0;
}
}
});
list2.stream().forEach(test -> {
System.out.println("list2 = " + test.toString());
});
}
}

posted @ 2018-11-17 15:55  gallenlee978  阅读(...)  评论(... 编辑 收藏