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")
私は上記を変換するList
にMap<String, Set<String>>
鍵がある場合、rid
その値があるSet
のname
フィールド。
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
にインスタンスをString
sの後に彼らは別にグループ化されますgetRid
。
Map<String, Set<String>> map =
someClassList.stream()
.collect(Collectors.groupingBy(SomeClass::getRid,
Collectors.mapping(SomeClass::getName,
Collectors.toSet())));