gpt4 book ai didi

java - 使用 Java 流将 List 更改为 Map

转载 作者:行者123 更新时间:2023-12-04 00:59:15 25 4
gpt4 key购买 nike

假设我有一个

List<int[]> input = ( {1,2,3}, {1,2,4}, 
{1,2,7}, {1,3,1}, {2,2},
{1,2,8}, {1,3,4}, {2,3})

我需要把它转换成

Map<int[] , int[]> result = { [{1,2} -> {3,4,7,8}] ,
[{1,3} -> {1,4}] ,
[{2} -> {2,3}] }

实际上,map 的键将是数组长度为 2 之前的公共(public)值,并且值应包含所有这些数组的最后一个元素。

有人可以建议我如何使用 java 流获取它吗,因为在正常循环中它是真正复杂的东西?

最佳答案

首先,将数组用作 Map 是一个非常糟糕的主意 key ,因为他们的 hashCodeequals方法基于对象标识,而不是数组内容。我建议将输入数据放入 List<List<Integer>>相反:

List<List<Integer>> lists = Arrays.asList(Arrays.asList(1,2,3), Arrays.asList(1,2,4),
Arrays.asList(1,2,7),Arrays.asList(1,3,1),Arrays.asList(2,2),
Arrays.asList(1,2,8),Arrays.asList(1,3,4),Arrays.asList(2,3));

有了这个,你的任务可以很容易地用级联 groupingBy 解决。 :

Map<List<Integer>, List<Integer>> result = lists.stream().collect(
Collectors.groupingBy(list -> list.subList(0, list.size() - 1),
Collectors.mapping(list -> list.get(list.size() - 1),
Collectors.toList())));

元素按列表前缀分类(除最后一个元素外的所有元素),然后在下游归约过程中提取最后一个列表元素并收集到列表中。

结果:

System.out.println(result);

{[2]=[2, 3], [1, 2]=[3, 4, 7, 8], [1, 3]=[1, 4]}

关于java - 使用 Java 流将 List<int[]> 更改为 Map<int[],int[]>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32044295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com