首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java8 Streams:过滤出地图

Java8 Streams:过滤出地图
EN

Stack Overflow用户
提问于 2018-04-13 03:21:48
回答 1查看 109关注 0票数 3

我正在尝试弄清楚如何在以下情况下使用Java8 streams:

假设我有以下Map:

Map<String,String[]> map = { { "01": {"H01","H02","H03"}, {"11": {"B11","B12","B13"}} };

所需的输出将是:

map = { {"01": {"H02"}, {"11": {"B11"}};

我的尝试是:

map.entrySet().stream() //
        .flatMap(entry -> Arrays.stream(entry.getValue()) //
        .filter(channel -> Channel.isValid(channel))
        .collect(Collectors.toMap()));
EN

回答 1

Stack Overflow用户

发布于 2018-09-16 01:21:24

这是另一种解决问题的方法:

public static void stack2() {
    Map<String, String[]> map = new HashMap<>();
    map.put("01", new String[]{"H01", "H02", "H03"});
    map.put("11", new String[]{"B11", "B12", "B13"});

    Map<String, String[]> newMap = map.entrySet()
            .stream()
            .peek(e -> e.setValue(
                Arrays.stream(e.getValue())
                    .filter(Main::stack2Filter)
                    .toArray(String[]::new)))
            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

    newMap.forEach((key, value) -> 
            System.out.println("key: " + key + " value " + Arrays.toString(value)));
}

public static boolean stack2Filter(String entry) {
    return entry.equals("H02") || entry.equals("B11");
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49804367

复制
相关文章

相似问题

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