Java流 - 在GroupBy之后获取内部元素

时间:2016-04-17 09:16:10

标签: java java-8 java-stream

我按汽车列表分组给那些有名字而一个没有名字的人。

cars.stream().collect(Collectors.groupingBy(car -> IdUtil.isEmpty(car.getName().equals(""))));

在此示例中,我将获得Map<Boolean, List<Cars>>

问题:

  1. 我想从每个小组中获得一个不同的内部成员,这样我才能得到 Map<Boolean, List<wheels>>使用条件
  2.   

    return((car.getName()。equals(“”))?FrontWheel?rearWheels;

    1. 我可以控制键值吗?
      对于此示例,使用一个表示
      的字符串 “后” - &GT;汽车清单 “前” - &GT;汽车清单
    2. 感谢。

1 个答案:

答案 0 :(得分:4)

对于#1,您可以使用can mapping Collector来将List<Cars>映射到其他内容:

Map<Boolean,List<wheels>> map1 =
cars.stream()
    .collect(Collectors.groupingBy(car -> IdUtil.isEmpty(car.getName().equals("")),
                                   Collectors.mapping(car -> ((car.getName().equals(""))? car.getFrontWheel() : car.getRearWheels(),Collectors.toList()));

对于#2,将密钥更改为您想要的密钥应该没有问题:

Map<String,List<Cars>> map2 =
cars.stream()
    .collect(Collectors.groupingBy(car -> IdUtil.isEmpty(car.getName().equals(""))?"Front":"Rear"));

当然,您可以将两者结合起来并获得Map<String,List<wheels>>

注意:此代码未经过测试,因此我可能会有一些拼写错误。