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

如何使用固定参数和varargs生成流?[副本]

长孙正卿
2023-03-14

假设我们有以下方法

void some(int id, int... otherIds) {

}

如何使用这两个参数创建单个IntStream?

IntStream.concat(
        IntStream.of(id),
        Optional.ofNullable(otherIds)
                .map(IntStream::of)
                .orElseGet(IntStream::empty)
);

它似乎很冗长。我们有什么简明的成语吗?

共有2个答案

郦翰学
2023-03-14

亚历山大·伊万琴科已经提到了三个选择。

还有一个:

Objects.requireNonNull(otherIds);
Stream.of(new int[] { id }, otherIds)
    .flatMapToInt(Arrays::stream)

我认为其他Ids不应该是null,应该被视为程序员错误。使用对象::要求NonNull它会快速失败。

籍兴文
2023-03-14

当需要处理可为null的流源时,可以使用流。ofNullable()可通过Java 9访问,它生成单例流或空流。它将比使用可选的更干净。ofNullable(),用于在其上链接方法。

IntStream.concat(IntStream.of(id),
    Stream.ofNullable(otherIds).flatMapToInt(IntStream::of))

另一种选择是使用Java9静态方法Objects.requireNonNullElse(),它需要一个可空参数和一个默认值:

IntStream.concat(IntStream.of(id),
    IntStream.of(Objects.requireNonNullElse(otherIds, new int[0])))

最简单和最干净的解决方案将是一个快速失败的实现,它将抛出一个NullPointerException以防数组其他Idsnull

IntStream.concat(IntStream.of(id), Arrays.stream(otherIds))

它的零安全味道(归功于@Holger):

IntStream.concat(IntStream.of(id),
                 otherIds != null ? Arrays.stream(otherIds) : IntStream.empty())
 类似资料:
  • 问题内容: 考虑方法声明: 该Object …参数只是对Objects 数组的引用。有没有办法在引用实际Object数组时使用此方法?如果我将Object数组传递给…参数-结果参数值将是一个二维数组-因为an Object[]本身就是an Object: 因此,数组的第一个组件(String.format方法中使用了哪个)将是一个数组,他将生成: 然后由于数组大小为1而发生错误。 该大胆的顺序是真

  • 我是JAVA新手,我想我已经搜索了所有的问题,没有找到一个与我的问题相似的。 我想使用Math.random()生成随机数,以返回4个固定数。我想要得到的数字是:0、90、180和270。换句话说,我想要4个最小值为0、最大值为270、增量为90的数字。

  • 我使用Spring数据JPA(目前是1.11.3.RELEASE)和Hibernate(目前是5.2.10.Final)作为JPA实现 我将以下场景作为(简化的)示例,首先是一个简单的用户实体类: 使用基于CRUD的用户存储库。此用户存储库应提供停用由其id标识的用户的方法: Spring Data JPA文档以@Query的修改形式对该解决方案进行了详细描述。 我在文档中遗漏的是如何提供ID列表

  • 问题内容: 我使用jOOQ 3.11.11生成了这样的SQL模板。 SQL模板: 将存储SQL模板,并根据实时查询条件确定参数。 实时SQL: order by子句有问题。 所以。如何用 “ id desc” 或 “ name asc” 用param 排序 替换订单并消除引号? 问题答案: 创建一个绑定变量,该绑定变量的生成方式与SQL一样,或者您选择使用命名参数,或者选择内联绑定变量。有关绑定变

  • 我想做的是:使用Android的MediaCodec将原始PCM音频样本编码到原始AAC文件中。 我的问题是:当我使用FFMPEG将生成的原始AAC文件打包到M4A容器中时,FFMPEG抱怨文件中缺少编解码器参数。 细节: 因为我找不到任何用于生成输出AAC文件的音频编码器的MediaCodec示例代码,所以我尝试将视频编码器修改为音频编码器。原始代码如下:源代码 我对音频编码器的配置如下: 然后