Java的8流,对象的转换列表地图<字符串,将<字符串>>

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实例,以String小号后,他们被分组getRid

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章