我已经通过几个例子去和那些没有为我工作。
这里就是我想要做:
我有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
小号后,他们被分组getRid
。
Map<String, Set<String>> map =
someClassList.stream()
.collect(Collectors.groupingBy(SomeClass::getRid,
Collectors.mapping(SomeClass::getName,
Collectors.toSet())));
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句