[解決済み] Java 8でStreamをキャストすることは可能ですか?
2022-04-13 10:43:22
質問
Java 8でストリームをキャストすることは可能ですか?オブジェクトのリストがあるとすると、次のようなことをして、すべての追加オブジェクトをフィルタリングすることができます。
Stream.of(objects).filter(c -> c instanceof Client)
この後、クライアントで何かをしようと思ったら、それぞれのクライアントをキャストする必要がありますが。
Stream.of(objects).filter(c -> c instanceof Client)
.map(c -> ((Client) c).getID()).forEach(System.out::println);
これは少し醜いように見えます。ストリーム全体を別の型にキャストすることは可能でしょうか?キャストのように
Stream<Object>
を
Stream<Client>
?
このようなことをすると、おそらく悪いデザインということになるのでしょうが、無視してください。コンピュータサイエンスの授業でこのようなことをやっているので、java 8の新機能を調べていて、これが可能かどうか知りたくなりました。
どのように解決するのですか?
いきなりそのような方法はないと思います。よりクリーンな解決策としては、以下のようなものが考えられます。
Stream.of(objects)
.filter(c -> c instanceof Client)
.map(c -> (Client) c)
.map(Client::getID)
.forEach(System.out::println);
または、コメントで提案されているように
cast
の方が読みやすいかもしれません。
Stream.of(objects)
.filter(Client.class::isInstance)
.map(Client.class::cast)
.map(Client::getID)
.forEach(System.out::println);
関連
-
テストが見つかりませんでした
-
maven プラグイン エラー プラグインの実行は、ライフサイクル構成ソリューションの対象外です。
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] Java 8 StreamをArrayに変換する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
final, finally, finalizeの違いについて話してください。
-
Eclipseで "XXXX "の解決策を(型に)解決することができない
-
プロジェクトの依存関係を解決できなかった 解決
-
eclipseにプロジェクトをインポートした後、Editorにmain typeが含まれない問題
-
Eclipseプロンプトを実行する java仮想マシンを使用しない
-
サーブレットクラスのインスタンス化エラーの解決法
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException: 1
-
スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 4 at text.Division.main(Divisi
-
spring aop アドバイスからの Null 戻り値が、サマリーのプリミティブ戻り値と一致しない。
-
コミットには何も追加されないが、未追跡のファイルが存在し、gitで未追跡のファイルに対する完璧な解決策