2016-08-20 18 views
-2

が、私はその新機能のいくつかをチェックアウトしていない実際の内容...Javaの8リストの結果が作成されたJava 8を使用して

次のクラスの印刷されています。

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

私はこのクラスを実行すると、私は見てみたかった値の代わりに、以下の取得:

[email protected] 
[email protected] 
[email protected] 
[email protected] 

私はおそらく間違っていますか?

+1

'Person'の' toString() 'をオーバーライドします。 –

+0

http://stackoverflow.com/questions/29140402/how-do-i-print-my-java-object-without-getting-sometype2f92e0f4を参照してください。 – Tunaki

+0

私はストリームコードを書くことができますが、 'toString'については知らないことに非常に驚いています。あなたは正しい順序で言語を習っていますか? – Dici

答えて

7

短い回答PersonクラスにtoStringの実装がありません。

説明: 渡されたオブジェクトにtoStringメソッドを呼び出し、出力を印刷System.out.println。あなたはこのような場合には、あなたのPersonのオブジェクトであることを起こる順番に、コレクションの各メンバーにtoStringメソッドを呼び出して、印刷するCollectionListを)、(AbstractCollection.toStringの実装を参照)、合格している。この場合

クラス。

あなたPersonクラスでtoStringをオーバーライドしていないので、Object.toStringは(すべてのJavaクラスは、暗黙のうちにObjectクラスを拡張)呼び出され、そしてあなたが[email protected]として出力を得る理由Object.toStringは次のように実装されているので、それは、です:

public String toString() { 
    return getClass().getName() + "@" + Integer.toHexString(hashCode()); 
} 
+0

Npですが、あなたの答えは少し短いです。どの問題に何百もの重複があるという基本的な質問ですが、それを少しだけ説明できます。 – Dici

関連する問題