前提
javaのラムダ式の勉強中です。
現在、printlnでリストを表示させようとすると「useOf.Book@3a71f4dd」のような参照値が出てしまいます。
printlnでリスト内のものを表示させるにはどのように記述すればよいのでしょうか。
該当のソースコード
java
1package useOf; 2 3import java.time.LocalDate; 4import java.util.Arrays; 5import java.util.List; 6 7interface Predicate{ 8 boolean test(Book book); 9} 10public class MyList { 11 public static void main(String[] args) { 12 List<Book> list = Arrays.asList( 13 new Book("120", "german", "Janssen", LocalDate.of(2017, 9, 18), 1500), 14 new Book("310", "japanese", "田中博", LocalDate.of(2018, 3, 5), 5500), 15 new Book("400", "english", "Alcott", LocalDate.of(2018, 2, 11), 4500) 16 ); 17 listup(list, book -> book.getPrice() <= 3000); 18 listup(list, book -> "田中博".equals(book.getAuthor())); 19 } 20 21 22 public static void listup(List<Book> list, Predicate p) { 23 for(Book book : list) { 24 if(p.test(book)) { 25 System.out.println(book); 26 } 27 } 28 } 29} 30 31 32
Predicate なら java.util.function にありますが…ラムダ式関係無いですね。
Book クラスの public String toString() メソッドをオーバーライドしてください。
Java クラスにtoStringメソッドを追加する意味
https://itsakura.com/eclipse-java-tostring
java API を調べることを勧めます。
PrintStream.println() https://docs.oracle.com/javase/jp/8/docs/api/java/io/PrintStream.html#println-java.lang.Object-
String.valueOf() https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html#valueOf-java.lang.Object-
Object.toString() https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Object.html#toString--
蛇足:問題の原因ではありません。
PredicateはBook専用のインターフェイスを定義していますが、型パラメータ<Book>を指定すれば汎用のPredicateでOK。ジェネリクス、型推論を調べてください。
public static void listup(List<Book> list, java.util.function.Predicate<Book> p) {
ありがとうございました。BookクラスにtoStringの生成で表示で大丈夫でした!
参照値ではなくgetClass().getName() + '@' + Integer.toHexString(hashCode())ですね、、
回答1件
あなたの回答
tips
プレビュー