列表<对象>的Java流排序元素
我目前正在尝试用Java学习streams,但是我偶然发现了一个我自己无法解决的问题。给定一个Person
对象列表,属性为age、height和name。我想写一个方法toString()
,它按高度对列表进行排序,如果高度按年龄相等(一切按降序排列)。有没有可能用流来解决这个问题?我知道如何按高度对列表进行排序,但我不明白如何得到相等的元素(相同高度的人)并按年龄对其进行排序
类Person
:
public class Person {
private int age;
private double height;
private String name;
public Person(int age, double height, String name){
this.age = age;
this.height = height;
this.name = name;
}
public int getAge() {
return age;
}
public double getHeight() {
return height;
}
public String getName() {
return name;
}
}
数据类(在其中创建toString方法):
public class Data {
private List<Person> persons;
public Data(List<Person> persons){
this.persons = persons;
}
public String toString(){
//sort the list (persons) and return a String of names
return "";
}
}
# 1 楼答案
您可以使用比较器链接按高度排序,然后按年龄排序。然后使用
map
操作符映射名称,最后加入收集器将名称连接到您感兴趣的格式化字符串中。这是它的样子然而,我不认为
double
是表示一个人年龄的好数据类型。int是一个更好的选择更新:
如果您有
int
数据类型来表示一个人的年龄,那么比较器链应该如下所示。其他一切都完好无损