質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

491閲覧

Javaのprintlnでラムダ式で判定したListを表示させようとすると参照値がでてしまう

KazuhoAkabane

総合スコア56

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2023/01/12 15:57

前提

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2023/01/12 17:38 編集

Predicate なら java.util.function にありますが…ラムダ式関係無いですね。 Book クラスの public String toString() メソッドをオーバーライドしてください。 Java クラスにtoStringメソッドを追加する意味 https://itsakura.com/eclipse-java-tostring
xebme

2023/01/13 01:03

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) {
KazuhoAkabane

2023/01/15 02:09 編集

ありがとうございました。BookクラスにtoStringの生成で表示で大丈夫でした! 参照値ではなくgetClass().getName() + '@' + Integer.toHexString(hashCode())ですね、、
guest

回答1

0

ベストアンサー

Javaでは任意のオブジェクトを便利にprintlnすることはできません。普通はそのオブジェクトを生成したクラスの方でtoString()を実装することで、その内容を出力できるようにします。

コード例

Main.java

Java

1class HogeInteger { 2 protected int value; 3 public HogeInteger(int value) {this.value = value;} 4} 5 6class HogeIntegerPrintable extends HogeInteger { 7 public HogeIntegerPrintable(int value) {super(value);} 8 public HogeIntegerPrintable(HogeInteger org) {this(org.value);} 9 public String toString() {return String.valueOf(value);} 10} 11 12public class Main { 13 public static void main(String[] args) throws Exception { 14 var val = new HogeInteger(10); 15 System.out.println(val); // HogeInteger@5a07e868のような出力 16 var val2 = new HogeIntegerPrintable(val); 17 System.out.println(val2); // 10と出力される 18 } 19}

投稿2023/01/12 16:25

編集2023/01/12 16:26
dameo

総合スコア943

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KazuhoAkabane

2023/01/13 01:41

ありがとうございます。 BookクラスにEclipsで「toStringの生成」を行ったところきちんと出力されるようになりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問