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

为现有流添加新价值

仇阳州
2023-03-14

有没有一种好方法可以向现有的流添加新值?我所能想象的是这样的:

public <T> Stream<T> addToStream(Stream<T> stream, T elem ) {
    List<T> result = stream.collect(Collectors.toList());
    result.add(elem);
    return result.stream();
}

但我正在寻找更简洁的东西,我可以在lambda表达式中使用,而不需要冗长。

当我试图实施PECS原则时,出现了另一个问题:

public <T> Stream<? super T> addToStream(Stream<? super T> stream, T elem ) {
    List<? super T> result = stream.collect(Collectors.toList()); //error
    result.add(elem);
    return result.stream();
}

似乎通配符不适用于流。收集,我想知道为什么。提前谢谢。

共有3个答案

王佐
2023-03-14

StreamEx库具有相应的方法。以下是如何使用它们的示例:

StreamEx.of("second").prepend("first").append("third").forEach(System.out::println);

输出如下:

first
second
third
艾骏
2023-03-14

怎么样

return Stream.concat(stream, Stream.of(elem));

这是假设原始流是有限的。如果不是,你可以按相反的顺序连接它们。

符懿轩
2023-03-14

这个问题掩盖了一个错误的假设:流实际上包含它们的数据。他们没有;流不是数据结构,它们是跨各种数据源指定批量操作的一种方法。

有组合器用于将两个流合并为一个,例如Stream.concat,还有工厂用于从一组已知元素(Stream.of)或集合(Collection.stream)创建流。因此,如果您想生成一个新流,即您手中的流的串联,以及描述新元素的新流,您可以组合这些。

PECS示例中的问题是,出现了三次<代码>?假设它们描述了相同的类型,但它们没有。每次出现通配符都对应一个唯一的捕获,这不是您想要的;您需要为该类型变量命名,以便编译器知道列表的类型和输入流的类型是相同的。(此外,不要具体化集合;这很昂贵,如果流不是有限的,则可能是不终止的。只需使用concat即可。)所以答案是:你只是把泛型搞错了。这里有一种方法:

public<T> Stream<T> appendToStream(Stream<? extends T> stream, T element) {
    return Stream.concat(stream, Stream.of(element));
}

你把自己和PEC混淆了,因为你想“插入”到流中,而事实上你正在从中消费。

 类似资料:
  • 问题内容: 如何更新字段以为现有价值增加价值? 例如我有 表名: 有没有一种方法可以简单地为信用增加价值? 喜欢 我想将7加到4,以便credit = 11,其中id =‘1’ ,该怎么做? 问题答案:

  • 问题内容: 如何更新字段以增加现有价值? 例如我有 表名: 有没有一种方法可以简单地为信用增加价值? 喜欢 我想将7加到4,以便credit = 11,其中id =‘1’ ,该怎么做? 问题答案:

  • 在我的情况下,有可能,例如,一个新的设备被启动,因此必须处理另一个流。但是如何动态添加这个新流呢?

  • 本文向大家介绍向Pandas中的现有DataFrame添加新列,包括了向Pandas中的现有DataFrame添加新列的使用技巧和注意事项,需要的朋友参考一下 Pandas 数据框是一种二维数据结构,即,数据以表格的形式在行和列中对齐。可以使用python dict,list和series等创建它。在本文中,我们将看到如何在现有数据框中添加新列。因此,首先让我们使用pandas系列创建一个数据框。

  • 代码是这个答案确实有效,增加了一个新的维度,但是它没有做我想要它做的事情。 为了进一步说明我的问题 - 我有以下定义时间(无限),纬度,经度,水平为四个维度和一个可变的位势高度。我想做的是在现有的可变地势高度中添加一个维度dimz_Z。 现在,上面代码中的答案是 netCDF 文件在 ncdump 中的样子 但是dimz_Z维度不见了,如下所示,从nck的输出。 它确实出现在定义中,但作为一个独立

  • 我想让“Ctrl+G”打开查找对话,就像“Ctrl+F”(所以两个快捷方式打开相同的“查找对话”)。 我知道我可以通过“宏>修改快捷方式”修改命令的现有快捷方式,但它只允许更改快捷方式,而不允许更改命令的“名称”(阴影)。