java的Collectors.toMap
小菜问下这个基础代码怎么写?
想使用Collectors.toMap
Map<Long, String> group = someStringList.stream().collect(Collectors.toMap(xxx,yyy, (key1, key2) -> key2));
someStringList的数据如下示例
101210
101212
102201202
102203205
someStringList是一个List<String> 想把他的内容拆解为2个部分,一部分当key,一部分当value,再按key部分分组
回答:
可能我理解错你的意思了,如果是 toMap
的话,对重复的 Key 只能留一个值,参考 @lpe234 的答案就对了,最多再转一下 Long
你要的不是 toMap
,而是 groupingBy
final List<String> sources = List.of("101210", "101212", "102201202", "102203205");var r = sources.stream()
.map(s -> new String[] { s.substring(0, keyLength), s.substring(keyLength) })
.collect(Collectors.groupingBy(
a -> Long.parseLong(a[0]),
Collectors.mapping(a -> a[1], Collectors.toList())
));
或者这么看起来简洁一点,反正都还要再 mapping 一次,不如合在一起
var r = sources.stream() .collect(Collectors.groupingBy(
s -> Long.parseLong(s.substring(0, keyLength)),
Collectors.mapping(s -> s.substring(keyLength), Collectors.toList())
));
结果是个 Map<Long, List<String>>
{1012=[10, 12], 1022=[01202, 03205]}
回答:
final List<String> strings = List.of("101210", "101212", "102201202", "102203205");//
final Map<String, String> stringMap1 = strings.stream()
.map(s -> List.of(s.substring(0, 3), s.substring(3)))
.collect(Collectors.toMap(l -> l.get(0), l -> l.get(1), (o1, o2) -> o2));
System.out.println(stringMap1);
// 输出
// {101=212, 102=203205}
没处理可能出现的异常,不知是否满足你
以上是 java的Collectors.toMap 的全部内容, 来源链接: utcz.com/p/944463.html