【问题标题】:Why can't I use a Java map to change the type of object in my stream? [duplicate]为什么我不能使用 Java 映射来更改流中对象的类型? [复制]
【发布时间】:2018-04-20 12:52:44
【问题描述】:

我正在处理一次加载 ApplicationResponse 对象 n 的 Web 服务。我想制作一个流,让我可以使用所有这些流,而不必担心分页,因此我(不完整)使用 Java 流。

我有一个生成页码的流。我想使用我之前编写的函数将这些数字映射到响应流。

问题是,它似乎希望我的箭头函数返回一个 int 而不是我所期望的 Stream。

我怎样才能重写这个表达式以便映射操作起作用?

【问题讨论】:

  • 拥有这么多声誉的人通常应该知道最好不要发布代码截图。尤其是强迫用户亲吻屏幕以辨认其中的任何内容。
  • 请发布实际代码。不是图片。
  • 使用mapToObj() 而不是map()

标签: java java-stream


【解决方案1】:

IntStream.map() 方法将IntUnaryOperator 作为参数。正如您在Java documentation 中看到的:

公共接口 IntUnaryOperator

表示对单个 int 值操作数的操作,该操作产生 int 值结果。这是 UnaryOperator 对 int 的原始类型特化。

这种类型的函数消耗int并产生int

按照 nickb 的建议,您应该使用 mapToObj 方法,该方法接受 IntFunction 参数类型 (Java documentation):

公共接口 IntFunction

表示一个接受 int 值参数并产生结果的函数。这是函数的消耗 int 的原始特化。

那些可以产生任何类型的对象。

【讨论】:

    【解决方案2】:

    因为您使用的是IntStream,其中.map 方法预计也会返回InstStream,如果您想将IntStream 转换为通常的对象流,您应该使用.boxed(),它将返回整数流,或者调用mapToObj(),它将使用指定的映射函数将您的整数映射到其他一些对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      相关资源
      最近更新 更多