我正在尝试使用groupingBy(...)lambda中的函数创建一个地图.现在我面临的问题是我无法将列表转换为特定条件的映射
码:
List<Integer> list = IntStream
.range(0,120)
.mapToObj(Integer::new)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
预期功能:
我需要收集一个地图,其键是键值,如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)));
}
Run Code Online (Sandbox Code Playgroud)
我在想什么(想法):
Map<Integer, Integer> myMap = list
.stream()
.collect(Collectors.groupingBy(Integer::new, list.subList(0, Integer::new)));
Run Code Online (Sandbox Code Playgroud)
错误:无法转换为List内部groupingBy()或不确定我是否遗漏了某些内容
怎么解决这个?欢迎任何帮助
编辑:
我需要在这里使用方法参考吗?
以下是方法
public static List<Integer> getList(Integer index, List<Integer> list) {
return list.subList(0, list.indexOf(index));
}
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
IntStream.range(0, 120)
.boxed()
.collect(Collectors.toMap(
x -> x,
y -> IntStream.range(0, y).boxed().collect(Collectors.toList())));
Run Code Online (Sandbox Code Playgroud)
而不是.mapToObj(Integer::new),你可以使用boxed().然后,您可以使用toMap()将值映射到键和值.关键是身份,所以你可以使用just x->x,值是一个新的列表,可以用它创建IntStream.range(0, y).boxed().collect(Collectors.toList())
| 归档时间: |
|
| 查看次数: |
281 次 |
| 最近记录: |