亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java 8 Streams - 要列表的嵌套映射

Java 8 Streams - 要列表的嵌套映射

米琪卡哇伊 2021-07-08 14:11:52
firstlist  .stream()  .map( x -> {             return secondList               .stream()               .map( y -> { //return a string } )               .collect(Collectors.toList()) // "Output" I need              }       )    .//Get the "Output" here我有兩個清單。第一個列表中的項目必須與第二個列表進行比較,并且必須構建新列表。樣本輸入List 1 : [ { "id" ; 3, "names" : ["test","test2"] }]List 2 : [ {"name": :"test" , "age" :3}]輸出:List 3 : [ {"id" : 3, "name" : "test", "age" :3} ]PS:names應根據第二個列表檢查第一個列表中的內容
查看完整描述

3 回答

?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

你需要這樣的東西:


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());

如果我理解你的問題,你有三個不同的對象,如下所示:


@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;

}

這個例子的輸出是:


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

對于注釋,我使用 Lombok


查看完整回答
反對 回復 2021-07-14
?
LEATH

TA貢獻1936條經驗 獲得超7個贊

您可能需要以下內容:


List<ClassWithId>  list1 = new ArrayList<>();

List<ClassWithAge> list2 = new ArrayList<>();


list1.add(new ClassWithId(3, Arrays.asList("test", "test2")));

list2.add(new ClassWithAge("test", 4));


List<ClassResult> list3 = list2.stream()

                               .map(i -> new ClassResult(

                                               list1.stream()

                                                    .filter(j -> j.getList().contains(i.getName()))

                                                    .map(j -> j.getId())

                                                    .findFirst().get(), 

                                               i.getName(), i.getAge()))

                               .collect(Collectors.toList());

此解決方案假定以下兩個輸入對象和輸出對象的結構:


帶標識的類


private int id;

private List<String> list;

年齡分類


private String name;

private int age;

類結果


private int id;

private int age;

private String name;


查看完整回答
反對 回復 2021-07-14
  • 3 回答
  • 0 關注
  • 174 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號