如何使用Java 8 lambda表达式循环遍历多个列表,并通过合并两个列表中的唯一值创建另一个列表?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (6480)

我正在编写一个代码来循环遍历多个列表,并创建另一个列表,使用Java 8 lambda表达式合并来自两个列表的唯一值。

型号类:

class ServiceMap{
    Integer serviceMapId;
    Integer seviceId;
}

代码逻辑:

List<ServiceMap> listA = getServiceMaps();//Will get from database
List<Integer> listB = Arrays.asList(1, 10, 9);//Will get from client
List<ServiceMap> listC = new ArrayList<>();//Building it merging of both lists above

listA.stream().forEach(e -> {
    if (listB.parallelStream().noneMatch(x -> x == e.getServiceId())) {
        listC.add(new ServiceMap(e.getServiceId()));
        return;
    }

    listB.stream().forEach(x -> {
        if (listC.stream().anyMatch(e2->e2.getServiceId() == x)) {
            return;
        }
        if (x == e.getServiceId()) {
            listC.add(new ServiceMap(e.getServiceId()));
        } else {
            listC.add(new ServiceMap(x));
        }
    });

});
listC.stream().forEach(x -> System.out.println(x));

使用java lambda表达式编写代码是否有效?

提问于
用户回答回答于

应该这样用;

Stream<Integer> streamOfServiceMapIds = listA.stream().map(ServiceMap::getSeviceId);
List<ServiceMap> collectedList = Stream.concat(streamOfServiceMapIds, listB.stream())
        .distinct()
        .map(ServiceMap::new)
        .collect(Collectors.toList());
用户回答回答于

可以流式传输每个列表,应用distinct它们并收集:

List<Integer> result = 
    Stream.concat(listA.stream(), listB.stream())
          .distinct()
          .collect(Collectors.toList());

所属标签

可能回答问题的人

  • 腾讯云数据库 TencentDB

    腾讯云 · 产品团队 (已认证)

    301 粉丝2 提问46 回答
  • EatRice

    17 粉丝0 提问169 回答
  • 华讯云

    1 粉丝0 提问151 回答
  • 成都加米谷大数据

    11 粉丝0 提问16 回答

扫码关注云+社区

领取腾讯云代金券