当前位置: 首页 > 知识库问答 >
问题:

使用lambda将列表转换为映射,但长度有限

单于淇
2023-03-14

我试图使用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));
}

共有1个答案

巩衡
2023-03-14

你可以做:

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将列表转换为。 当我尝试将列表中的单个值映射为映射的键时,我得到了一个错误。