热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用流创建一个包含字符串列表的映射

如何解决《使用流创建一个包含字符串列表的映射》经验,为你挑选了2个好方法。

我有一个ListString(一个或多个),但我想它转换成一个MapList,使所有的boolean设置映射真实.我有以下代码.

import java.lang.*;
import java.util.*;
class Main {
  public static void main(String[] args) {
    List list = new ArrayList<>();
    list.add("ab");
    list.add("bc");
    list.add("cd");
    Map alphaToBoolMap = new HashMap<>();
    for (String item: list) {
      alphaToBoolMap.put(item, true);
    }
    //System.out.println(list); [ab, bc, cd]
    //System.out.println(alphaToBoolMap);  {ab=true, bc=true, cd=true}
  }
} 

有没有办法减少使用流?



1> Elliott Fris..:

是.你也可以Arrays.asList(T...)用来创建你的List.然后使用a Stream来收集这个Boolean.TRUE

List list = Arrays.asList("ab", "bc", "cd");
Map alphaToBoolMap = list.stream()
        .collect(Collectors.toMap(Function.identity(), (a) -> Boolean.TRUE));
System.out.println(alphaToBoolMap);

输出

{cd=true, bc=true, ab=true}

为了完整起见,我们还应该考虑一些值应该是的例子false.也许是空键

List list = Arrays.asList("ab", "bc", "cd", "");

Map alphaToBoolMap = list.stream().collect(Collectors //
        .toMap(Function.identity(), (a) -> {
            return !(a == null || a.isEmpty());
        }));
System.out.println(alphaToBoolMap);

哪个输出

{=false, cd=true, bc=true, ab=true}



2> Federico Per..:

我能想到的最短路线不是单线,但确实很短:

Map map = new HashMap<>();
list.forEach(k -> map.put(k, true));

这是个人品味,但我只在需要将变换应​​用于源,或过滤掉某些元素等时才使用流.


正如@ holi-java的评论中所建议的那样,多次使用Mapwith Boolean值是没有意义的,因为映射键只有两个可能的值.相反,a Set可以用来解决你用a解决的几乎所有相同的问题Map.


推荐阅读
author-avatar
被盗不玩了
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有