我试图使用lambda中的groupingby(...)
函数创建一个映射。现在我面临的问题是我无法将列表转换为特定情况下的映射
List<Integer> list = IntStream
.range(0,120)
.mapToObj(Integer::new)
.collect(Collectors.toList());
[]
[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)));
我需要在这里使用方法引用吗?
下面是方法
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())
创建该列表
我是Mapstruct的新手。我试图将列表转换为地图,我在网上搜索了很多,我有一些解决方案,比如它还没有在mapstruct中实现。如果有人能提供一些替代解决方案,我将很高兴。所有我希望转换映射如下: 现在是否可以使用MapStruct来实现?
我有一张这样的地图<代码>地图 我使用了对象映射器,但它不工作,因为映射在我的结构中包含另一个映射。
我有一个包含两个重要属性的列表,和。实例可以共享值,但具有唯一的s。 我想把这个List转换成一个Map,这样共享一个Bar的所有实例的唯一的都被放在映射到那个共享的的Set中。 我自己的功能印章还没有被证明能胜任这项任务。我试图同时和List,但是当试图将不同的参数实现为lambdas时,被类型问题绊倒了。 尝试使用Collect 不完整,编译器无法确定m或foo和Foo::getBaz的类型。
我刚刚开始看Java8,为了尝试lambdas,我想我应该尝试重写我最近写的一个非常简单的东西。我需要将一个字符串到列的映射转换为另一个字符串到列的映射,其中新映射中的列是第一个映射中列的防御副本。列具有复制构造函数。到目前为止我得到的最接近的数据是: 但我相信一定有更好的方法来做这件事,我会很感激一些建议。
假设我有一个名为student的对象列表。对象Student的定义如下 在学生列表中,可以有多个具有相同studentName但不同CourseTaking的学生对象。现在我想把学生名单变成一张studentName和courseTaking的地图,如下所示 关键是studentName,而值是将同一学生的所有课程设置放在一起作为一个集合。我如何使用stream()&collection()来实现
我有以下代码,希望使用Java8将列表转换为。 当我尝试将列表中的单个值映射为映射的键时,我得到了一个错误。