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

如何使用流API在Java8中更新列表中的每个元素

施阳夏
2023-03-14
List<Integer> list1 = new ArrayList<>();
list1.add(1); 
list1.add(2);

共有1个答案

翁和颂
2023-03-14

当您从列表创建时,不允许按照包文档中“非干扰”部分中的指定,从修改源代码列表。不遵守此约束可能导致ConcurrentModificationException,甚至更糟的是,数据结构被破坏而没有异常。

使用Java流直接操作列表的唯一解决方案是创建一个不在列表本身上迭代的流,即在索引上迭代的流,如

IntStream.range(0, list1.size()).forEach(ix -> list1.set(ix, list1.get(ix)+1));

类似于Eran的回答

但是这里没有必要使用。目标可以实现得很简单

list1.replaceAll(i -> i + 1);

这是Java ;8中引入的一个新的list方法,也允许流畅地使用lambda表达式。除此之外,还有可能众所周知的iterable.foreach、很好的Collection.removeif和就地list.sort方法,用于命名其他不涉及流API的新收集操作。另外,map接口有几个值得了解的新方法。

另请参见官方文档中的“利用Java SE8中的Lambda表达式和流的新的和增强的API”。

 类似资料:
  • 如何使用8流对列表中的每个元素Java求和? 例如,我在一个列表中有3个不同的列表,我试图对每个列表中的每个元素求和,然后创建另一个列表。我不熟悉Java 8,尝试使用流API解决一些问题: 我正在努力实现的输出:

  • 我有客户对象的列表。我想迭代列表并按1递增顺序。 我尝试了每个列表,但在这里我必须创建新列表并在其中添加值。 有没有更好的方法?我尝试使用streams,但它只是映射订单

  • 我有以下几门课: 我有一个物品清单。我想遍历列表并找到具有特定ID的实例。我试着通过溪流来做。

  • 假设我有这样一个列表: 是否可以使用Java8流从该列表中每隔一秒获取一个元素以获得以下内容? 或者甚至每三个元素? 基本上,我正在寻找一个函数来获取流的每n个元素:

  • 对于上述代码,我得到的输出为: 但我的期望是得到。 你能指导我实现这一点吗?

  • 给定列表list1=[[1,2,3],[4,5,6]],为了返回[['1','2','3'],['4','5,'6']],我尝试了以下操作: 这对列表不起作用:它不改变输出list1。我认为它可以通过重新分配来工作,类似于循环中的a[0][0]=str(a[0][0])(它确实起作用)。当然,上面的for循环不会这样做。 我还尝试了“地图”,如 这也与清单1完全无关。 我正在试图改变原来的名单,这