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流重写它?
答案 0 :(得分:3)
您需要流传输拆分数组,使用map
对其进行操作,最后将其收集到地图中:
return Arrays.stream(reports.split( "," ))
.map(s-> s.split("|"))
.collect(Collectors.toMap(p-> Long.parseLong(p[0]), p-> p[1]));
答案 1 :(得分:0)
@Squiggs:地图-不允许重复的键。也请查看下面的代码。我认为这也可能对您有所帮助,或者给您更多信息。我将输入源字符串更改为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}