membersound:
関数のパラメータとしてラムダ式を渡すことが可能ですか?例は、以下のように:私は「戦略」のリスト項目からその抽出物の性質を渡したいです。何度も繰り返しストリームマッピングを繰り返す必要がないために。
List<MyObject> list;
list.stream().map(item -> item.field1)).collector(Collectors.joining(","));
list.stream().map(item -> item.field2)).collector(Collectors.joining(","));
list.stream().map(item -> {
//some complex parser function
})).collector(Collectors.joining(","));
...
//pseudocode
private String map(List<MyObject> list, Function func) {
return list.stream.map(item -> func.call()).collector(Collectors.joining(","));
}
アップデート:
どのオブジェクト型が変更された場合?私はまだ私の一般的な持ちたいmap()
抽出されたフィールドの収集を定義する方法を。しかし、オブジェクト型の変化として、私はちょうど、所望の特性を抽出する方法を知っている機能を提供します。
class Person {
String name;
}
class Car {
String manufacture;
}
map(persons, (person) -> person.name));
map(cars, (car) -> car.manufacture));
map(cars, (MyObject) -> {
//more complex parsing
}));
Ousmane D .:
使用Function<MyObject, String>
:
private String map(List<MyObject> list, Function<MyObject, String> func) {
return list.stream().map(func).collect(Collectors.joining(","));
}
更新:
ここでの一般的な実装は次のようになります。
private <T> String map(List<? extends T> list,
Function<? super T, ? extends CharSequence> func) {
return list.stream().map(func).collect(Collectors.joining(","));
}