为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Java 8 中从管道分离的 CSV 返回地图

如何在 Java 8 中从管道分离的 CSV 返回地图

MM们 2021-09-29 10:09:47
public Map<Long, String> getReports(){    // 123434|str1,123434|str2,123434|str3    HashMap<Long, String> map = new HashMap<Long, String>();    List<String> items =  Arrays.asList( reports.split( "," ) );    for( String i : items )    {        String parts[] = i.split( "|" );        map.put( Long.parseLong( parts[0] ), parts[1] );    }    return map;}想知道如何使用 Java8 流重写它?
查看完整描述

2 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

您需要流式传输拆分数组,用于map操作它并最终将其收集到地图中:


return Arrays.stream(reports.split( "," ))

             .map(s-> s.split("|"))

             .collect(Collectors.toMap(p-> Long.parseLong(p[0]), p-> p[1]));


查看完整回答
反对 回复 2021-09-29
?
弑天下

TA贡献1818条经验 获得超8个赞

地图 - 不允许重复键。也请查看下面的代码。我认为它也可能对您有所帮助或为您提供更多信息。我已将输入源字符串更改为1234345|str1,1234346|str2,1234347|str3并更新了额外的行,尤其是sysout打印内存值。


String source = "1234345|str1,1234346|str2,1234347|str3";


    return Arrays.stream(source.split(","))

            .map(s -> s.split("\\|"))

            .collect(  Collectors.toMap ( s -> { System.out.println(" 1: "+Long.valueOf ( s[0]));  return Long.valueOf ( s[0]);} ,

                                          s -> { System.out.println(" 2: "+s[1]);return s[1]; },

                                          ( (v1, v2) -> {   System.out.println("------ line 131 : "+v1 +"  "+v2); return v2 ;}  )

                                        )

                     );

使用上述来源,您将获得输出: {1234346=str2, 1234347=str3, 1234345=str1}


如果我将源更改为source = "123434|str1,123434|str2,123434|str3",则输出为{123434=str3}


查看完整回答
反对 回复 2021-09-29
  • 2 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信