gpt4 book ai didi

java - 使用 lambda 将列表转换为 map ,但长度有限

转载 作者:搜寻专家 更新时间:2023-10-31 19:37:13 26 4
gpt4 key购买 nike

我正在尝试使用 lambda 中的 groupingBy(...) 函数创建 map 。现在我面临的问题是我无法将列表转换为特定条件下的 map

代码:

List<Integer> list = IntStream
.range(0,120)
.mapToObj(Integer::new)
.collect(Collectors.toList());

预期功能:

我需要收集一个映射,其键是键值,如键从 0 到 120,值会像这样增加

[]
[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 6, 7]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
.
.
.
//so on upto 120


Map<Integer, List<Integer>> myMapOne = new HashMap<>();
for (Integer inteter : list) {
myMapOne.put(inteter, list.subList(0, list.indexOf(inteter)));
}

我正在尝试的(想法):

Map<Integer, Integer> myMap = list
.stream()
.collect(Collectors.groupingBy(Integer::new, list.subList(0, Integer::new)));

错误:无法在 groupingBy() 内转换为 List 或不确定我是否遗漏了什么

如何解决?欢迎任何帮助

编辑:

我需要在这里使用方法引用吗?

方法如下

public static List<Integer> getList(Integer index, List<Integer> list) {
return list.subList(0, list.indexOf(index));
}

最佳答案

你可以这样做:

IntStream.range(0, 120)
.boxed()
.collect(Collectors.toMap(
x -> x,
y -> IntStream.range(0, y).boxed().collect(Collectors.toList())));

您可以使用 boxed() 而不是 .mapToObj(Integer::new)。然后您可以使用 toMap() 将值映射到键和值。键只是身份,所以你可以只使用 x->x,值是一个新列表,可以用 IntStream.range(0, y).boxed( ).collect(Collectors.toList())

关于java - 使用 lambda 将列表转换为 map ,但长度有限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39303668/

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