首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Map<key,List<VO>>到Map<key,List<String从VO>

Java Map<key,List<VO>>到Map<key,List<String从VO>
EN

Stack Overflow用户
提问于 2021-09-08 13:51:34
回答 3查看 192关注 0票数 1

我有一个Map<KeyString, List<MyVO>>

MyVO.java包含:

代码语言:javascript
复制
String name;
int id;

我想把它映射到Map<KeyString, List<names from MyVO>中。

如何使用java 8流来实现这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-09-08 14:00:53

你可以使用这样的东西:

代码语言:javascript
复制
Map<String, List<String>> response =
        map.entrySet().stream()
                .collect(Collectors.toMap(
                        Map.Entry::getKey, 
                        e -> e.getValue().stream()
                                .map(MyVO::getName)
                                .collect(Collectors.toList())));
票数 4
EN

Stack Overflow用户

发布于 2021-09-08 14:13:47

我在用唱片演示。一堂课也会在这里工作。

代码语言:javascript
复制
record VO(String getStr) 
}

首先创建一些数据

代码语言:javascript
复制
Map<String, List<VO>> map =
        Map.of("A", List.of(new VO("S1"), new VO("S2")), "B",
                List.of(new VO("S3"), new VO("S4")));
map.entrySet().forEach(System.out::println);

版画

代码语言:javascript
复制
A=[VO[str=S1], VO[str=S2]]
B=[VO[str=S3], VO[str=S4]]

Collectors.toMap.

  • use

  • 现在流原始地图

  • 的输入集,并使用Entry.

  • and流的原始键收集VO的列表,以提取字符串并创建一个新的列表。

代码语言:javascript
复制
Map<String,List<String>> result = map.entrySet().stream()
       .collect(Collectors.toMap(
            Entry::getKey,
            e -> e.getValue().stream().map(VO::getStr).toList()));

版画

代码语言:javascript
复制
A=[S1, S2]
B=[S3, S4]
票数 2
EN

Stack Overflow用户

发布于 2021-09-08 14:22:40

解决办法:

代码语言:javascript
复制
public static void mapNames() {
    final Map<String, List<MyVO>> voMap = new HashMap<>();
    voMap.put("all", Arrays.asList(
            new MyVO(1, "John"),
            new MyVO(2, "Bill"),
            new MyVO(3, "Johanna")
    ));

    final Map<String, List<String>> nameMap = voMap.entrySet().stream()
            .filter(Objects::nonNull)
            .collect(
                    Collectors.toMap(
                            Map.Entry::getKey,
                            e -> e.getValue().stream()
                                    .map(MyVO::getName)
                                    .collect(Collectors.toList())
            ));

    System.out.println(nameMap);
}

输出:

代码语言:javascript
复制
{all=[John, Bill, Johanna]}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69104366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档