メソッドのパラメータとしてラムダマッピング機能を提供するためにどのように?

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(","));
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=197841&siteId=1