根据列表中的值过滤地图的键<String>。地图就是地图<String, List<String>>

问题描述 投票:0回答:1

我有下面的代码片段

        String s = "Downloaded";
        Map<String, List<String>> m = Map.ofEntries(
                Map.entry("Download", List.of("Download", "Downloading,", "Downloaded")) ,
                Map.entry("Upload", List.of("Upload", "Uploading,", "Uploaded"))
        );

我想流过这个映射,如果 s 与 List 中的任何项目部分匹配(这是映射的键之一的值),我想返回该键。我该如何使用 Streams?另外,要求是只要其中一个字符串是

s
的超字符串,我仍然可以返回密钥。

java java-8
1个回答
0
投票

您可以创建地图条目流。按您的标准过滤。然后从任何匹配的条目中提取密钥。收集那些提取的钥匙。

 Collection < String > keys =
        map
            .entrySet()
            .stream()
            .filter( ( Map.Entry < String, List<String> > entry ) -> entry.getValue().contains( s ) )
            .map( Map.Entry :: getKey )
            .collect( Collectors.toUnmodifiableList() ) ;

请参阅此 在 Ideone.com 上运行的代码

[下载]

© www.soinside.com 2019 - 2024. All rights reserved.