Java 8流-嵌套映射到列表 [英] Java 8 Streams - Nested Maps to List

查看:105
本文介绍了Java 8流-嵌套映射到列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

firstlist
  .stream()
  .map( x -> { 
            return secondList
               .stream()
               .map( y -> { //return a string } )
               .collect(Collectors.toList()) // "Output" I need
              }
       )
    .//Get the "Output" here

我有两个清单.第一个列表中的项目必须与第二个列表进行比较,并且必须建立新的列表.

I have two list. the item in first list have to compared with second list and new list have to built.

样本输入

List 1 : [ { "id" ; 3, "names" : ["test","test2"] }]
List 2 : [ {"name": :"test" , "age" :3}]

输出:

List 3 : [ {"id" : 3, "name" : "test", "age" :3} ]

P.S:应对照第二个列表检查第一个列表中的names

P.S: The names in first list should be checked against second list

推荐答案

您需要这样的内容:

List<ObjectA> firstlist = new ArrayList<>();
firstlist.add(new ObjectA(3, Arrays.asList("test", "test2")));
List<ObjectB> secondList = new ArrayList<>();
secondList.add(new ObjectB("test", 3));

List<ObjectC> result = firstlist.stream()
        .flatMap(a -> secondList.stream()
                .filter(b -> a.getNames().contains(b.getName()))
                .map(c -> new ObjectC(a.getId(), c.getName(), c.getAge()))
        ).collect(Collectors.toList());

如果我理解您的问题,那么您有三个不同的对象,如下所示:

If I understand your question you have three Object different like this:

@Getter @Setter @AllArgsConstructor @NoArgsConstructor
public class ObjectA {
    private int id;
    private List<String> names;
}

@Getter @Setter @AllArgsConstructor @NoArgsConstructor
public class ObjectB {
    private String name;
    private int age;
}

//And the result Object you want to get
@Getter @Setter @AllArgsConstructor @NoArgsConstructor @ToString
public class ObjectC {
    private int id;
    private String name;
    private int age;
}


此示例的输出为:


The outputs of this example is :

[ObjectC(id=3, name=test, age=3)]


对于注释,我正在使用Lombok

这篇关于Java 8流-嵌套映射到列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆