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

如何构建一个包含现有列表中所有条目的新列表,以及一个修改了一个字段的每个条目的副本?

苏边浩
2023-03-14

我有一个叫做列表的对象列表。使用list.stream(),我需要创建一个相同对象的新列表,其中新列表包含所有原始条目,新列表包含每个条目的副本,其中修改了一个字段。我知道如何使用list.stream()两次完成这一操作,但我希望在1个stream下完成这一操作。

这就是我两次使用list.stream()完成任务的方式

         newList = list.stream().collect(Collectors.toList());
         newList.addAll(list.stream().map(l -> {SomeObject a = new SomeObject(l);
                              a.setField1("New Value");
                              return a;
                              }).collect(Collectors.toList())
                        );

共有1个答案

狄安歌
2023-03-14

使用flatmap(假设您不介意交错原始值和派生值):

newList = list.stream()
    .flatMap(l -> {
      SomeObject a = new SomeObject(l);
      a.setField1("New Value");
      return Stream.of(l, a);
    })
    .collect(toList());

如果只是不想使用stream()两次,则可以使用addall避免使用第一次;和第二个代码的不必要的collection:

newList = new ArrayList<>(list.size() * 2);
newList.addAll(list);
list.stream()
    .map(l -> {
        SomeObject a = new SomeObject(l);
        a.setField1("New Value");
        return a;
    })
    .forEach(newList::add);
 类似资料:
  • 问题内容: 我有一张表格,其中每一行都是以下形式: 凡我查询寻找的价值配对,使用。就查询时间而言,改为使用一个表(其中每行是一个排列)是否更有效: 这样,我这次使用=运算符查询了值b。 值得注意的是,我感兴趣的用例当前有大约10,000行,其中每个“列表”元素平均有8个条目。我同时标记了两者,因为使用和的数据库都存在类似的问题。 问题答案: 我的查询在其中使用LIKE寻找一对值,%b%。就查询时间

  • 我正在从远程数据库读取一组行,从本地数据库读取一组类似的行,然后使用RemoveAll删除本地已经存在的远程行。。。 但这对我来说似乎不对。当我真正需要做的只是检查是否存在匹配项时,我认为我不应该计算事物。我尝试了和的各种用法,但得到了废话。我不能使用(如这里建议的),因为列表元素不是同一类型。 有更好的方法吗?

  • 我有一个清单如下: 我想做的是遍历mylist并生成如下所示的新列表: 换句话说,制作一个列表列表,其中每个列表包含初始列表条目的唯一组合,这样一个字母在结果列表的每个条目中不会出现两次。而且,每次将一个条目添加到result中时,我们都从初始列表的可用组合集合中抽象出它的子元素。(我猜给出的例子比解释更清楚)。

  • 问题内容: | uId | title | amount | makers | widgets | 1 richard 998 xcorp sprocket 2 swiss 995 ycorp framitz 3 ricky 90 zcorp flobber 4 ricky2 798 xcorp framitz 1 lilrick 390 xcorp sprocket 1 brie 200 mco

  • 问题内容: 我有两个清单说 现在,我想找出List2中是否存在List1的所有元素。在这种情况下,就全部存在。我不能使用子集函数,因为我可以在列表中重复元素。我可以使用for循环来计算List1中每个项目的出现次数,并查看它是否小于或等于List2中的出现次数。有一个更好的方法吗? 谢谢。 问题答案: 当出现次数无关紧要时,您仍可以通过动态创建集合来使用子集功能: 如果需要检查每个元素在第二个列表

  • 问题内容: 我正在尝试打开文件并创建一个列表,其中每行都从文件中读取。 但是由于这样说,这个示例代码给了我一个错误。我这是什么问题 我如何编写代码以增加InFile中每个新行的列表数? 问题答案: 比这容易得多: 这将返回文件中每一行的列表。