Java 8 - 列出结果是打印不是实际内容

时间:2016-08-20 23:06:00

标签: java java-8

使用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));
    }
}

我可能做错了什么?

1 个答案:

答案 0 :(得分:7)

简短回答:您在toString课程中缺少Person个实施。

<强>解释System.out.println在传递的对象上调用toString方法并打印输出。

在这种情况下,您要传递要打印的CollectionList),然后在集合的每个成员上调用toString方法(请参阅{{1的实现) }}),在这种情况下碰巧是你的AbstractCollection.toString类的对象。

由于您没有在Person类中重写toString,因此调用Person(所有Java类隐式扩展Object.toString类),这就是为什么你得到了输出为Object,因为Person@123456实现为:

Object.toString