Javaの8つのストリーム、地図<文字列、設定<Stringにオブジェクトの変換一覧>>

Bikas Katwal:

私はすでにいくつかの例を介して行っていると、それらは私のために動作しませんでした。

ここで私が何をしようとしていますものです:

私が持っているList<SomeClass>以下のクラスのを:

class SomeClass {
  String rid;
  String name;
  ...
}

私の中の値Listのようになります。

SomeClass(1,"apple")
SomeClass(1,"banana")
SomeClass(1,"orange")
SomeClass(2,"papaya")
SomeClass(2,"peaches")
SomeClass(3,"melons")

私は上記を変換するListMap<String, Set<String>>鍵がある場合、ridその値があるSetnameフィールド。

Javaの使用してこの問題を解決するにはStreams、私が使用しているgroupingByと私は解決策以下に来ることができます:

someClassList
            .stream()
            .map(SomeClass::getName)
            .collect(
                  Collectors.groupingBy(
                      SomeClass::getRid, Collectors.toSet()));

しかし、これは私にコンパイルエラーが発生します。どのように私はこの問題を解決し、私のアプローチの問題点は何ですか?

彼らは次のとおりでした:

あなたが呼び出すと.map(SomeClass::getName)、あなたにStream<SomeClass>、あなたが得ますStream<String>あなたは実行できないcollect(Collectors.groupingBy(SomeClass::getRid,...))Stream<String>(あなただけにそれを実行することができますStream<SomeClass>)。したがって、あなたのmapステップが間違っています。

あなたは合格する必要がCollectorで返されるのCollectors.mapping()Collectors.groupingBy()マッピングするためにSomeClassにインスタンスをStringsの後に彼らは別にグループ化されますgetRid

Map<String, Set<String>> map =
    someClassList.stream()
                 .collect(Collectors.groupingBy(SomeClass::getRid, 
                                                Collectors.mapping(SomeClass::getName,
                                                                   Collectors.toSet())));

おすすめ

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