使用Java 8,我正在检查它的一些新功能......
创建以下类:
[['t', 'h', 'i', 's', 'i', 's'],
['a', 's', 'a', 'm', 'p', 'l'],
['e', 's', 't', 'r', 'i', 'n'],
['g', None, None, None, None, None]]
创建了PersonApp类:
public class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
}
当我运行这个课程时,我得到以下内容而不是我想看到的值:
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import static java.util.Comparator.comparing;
public class PersonApp {
public static void printSorted(List<Person> people, Comparator<Person> comparator) {
people.stream()
.sorted(comparator)
.forEach(System.out::println);
}
public static void main(String[] args) {
List<Person> people = new ArrayList<>();
people.add(new Person("Sara", 12));
people.add(new Person("Mark", 43));
people.add(new Person("Bob", 12));
people.add(new Person("Jill", 64));
printSorted(people, comparing(Person::getAge).thenComparing(Person::getName));
}
}
我可能做错了什么?
答案 0 :(得分:7)
简短回答:您在toString
课程中缺少Person
个实施。
<强>解释强>:
System.out.println
在传递的对象上调用toString
方法并打印输出。
在这种情况下,您要传递要打印的Collection
(List
),然后在集合的每个成员上调用toString
方法(请参阅{{1的实现) }}),在这种情况下碰巧是你的AbstractCollection.toString
类的对象。
由于您没有在Person
类中重写toString
,因此调用Person
(所有Java类隐式扩展Object.toString
类),这就是为什么你得到了输出为Object
,因为Person@123456
实现为:
Object.toString