List排序问题
java8
中引入了流的概念,还有Lambda
函数的概念,那么针对List<Object>
排序有哪些方法呢?
首先我们创建一个User
实体类:
public static class User {
public String name;
public int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
//重写了toString方法,方便打印观察
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
"}\n";
}
}
创建List<User>
对象
List<User> users = Arrays.asList(
new User("zhang1", 14),
new User("zhang2", 25),
new User("zhang3", 16),
new User("zhang4", 27),
new User("zhang5", 18),
new User("zhang6", 12)
);
我们想根据年龄来做个排序
方法一:
users.sort(new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
return o1.age - o2.age;
}
});
users.forEach(System.out::print);
有了Lambda
,直接可以简写成
users.sort((o1, o2) -> o1.age - o2.age);
users.forEach(System.out::print);
方法二:
users.stream().sorted((o1, o2) -> o1.age - o2.age).forEach(System.out::print);
以上都可以实现List<User>
根据年龄排序,打印结果
User{name='zhang6', age=12}
User{name='zhang1', age=14}
User{name='zhang3', age=16}
User{name='zhang5', age=18}
User{name='zhang2', age=25}
User{name='zhang4', age=27}