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

在Java8中从双流中收集长数据列表

穆俊哲
2023-03-14

我有以下代码:

List<Long> list = new ArrayList<>();
list.add(4L);
list.add(92L);
list.add(100L);
List<Long> newList = list.stream().map(i -> i * 2.5)
                                  .mapToLong(Double::doubleToRawLongBits)
                                  .collect(Collectors.toList());

此代码不工作,编译错误是:

方法接口java中收集。util。流动LongStream无法应用于给定类型
必选:java。util。作用供应商

我已经尝试了收藏家的许多用法,但我仍然无法工作。我做错了什么?


共有3个答案

葛承德
2023-03-14

不确定您期望的结果是什么样子,但这会生成一个List

public void test() {
    List<Long> list = new ArrayList<>();
    list.add(4L);
    list.add(92L);
    list.add(100L);
    List<Long> newList = list.stream()
            // Times 1.5.
            .map(i -> i * 2.5)
            // Grab the long bits.
            .mapToLong(Double::doubleToRawLongBits)
            // Box them.
            .boxed()
            // Make a list.
            .collect(Collectors.toList());
    System.out.println(newList);
}

秦光启
2023-03-14

如果您使用map而不是mapToLong,则应该编译此代码。(我不确定您想用douleToRawLongBits做什么,但这至少可以编译。)

冀萧迟
2023-03-14

mapToLong为您提供了一个LongStream,它不能被收集器收集。toList

这是因为LongStream

原始长值元素序列

我们不能有<代码>列表

list.stream().map(i -> i * 2.5)
    .mapToLong(Double::doubleToRawLongBits)
    .boxed()                                //< I added this line
    .collect(Collectors.toList());

盒装的方法给我们一个Stream

使用map而不是mapToLong也可以,因为这将导致蒸汽

list.stream().map(i -> i * 2.5)
    .map(Double::doubleToRawLongBits)
    .collect(Collectors.toList());

 类似资料:
  • 我想迭代一个对象列表。每个对象都包含一些对象的变量。更具体地说: 我的名单是: 所需的映射结构是:

  • 我有一个HashMap,我需要使用一些函数对其进行筛选: 上述代码中的错误是变量的声明类型。应该是而不是。 所以现在的功能代码是:

  • 我有一个嵌套的映射,其中key是员工名称,values是另一个映射,其中key是公司名称,value是经验年数,如下所示 现在我的函数应该返回一个映射,以员工姓名为键,以总经验为值。我如何使用java流(在单个流中)做到这一点

  • 给定诸如之类的流, 我怎样才能最优雅地将它转换成给定的形式: (当然,假设我定义了类对)? 编辑:这不是严格的关于int或基元流。对于任何类型的流,答案都应该是通用的。

  • 但是,此修复: 有没有更优雅的方式这样做?

  • 所以我试图使用Java8流Collectors.toMap添加元素到新创建的Map。 要创建的映射可能包含其某些键的空值。这对于HashMap来说是完全可以接受的,当我使用stream forEach添加成员时,它会按预期工作: msgRouteProps是一个映射,其中键和值都是非空的。请注意,ReflectionUtil。getNamedMethod()调用可能会返回null,我希望将其放入结