我得到一个列表,我想用“$”符号替换此列表中的第一个值,以便我可以在其他地方使用它。但我不希望列表中的其余字符放错位置或更改。可以将结果作为新列表获取。
我已经尝试过只使用 list.add(index, value) 函数,但它改变了列表的顺序。但我不想对列表的其余部分进行任何更改。
是否有学习 java 流的好的教程。我觉得掌握起来很困惑。提前致谢。
如果输入列表是 ('H','E','L','L','O') 输出应该完全像 ('$','E','L','L ','O').
最佳答案
您可以使用索引访问列表。如果索引为零,则将其map
到$
,否则将其发送到流处理管道的下一步。最后收集到一个List中。如果您使用的是 Java8,这种方法比修改源容器要好。这是它的样子。
List<Character> updatedList = IntStream.range(0, chars.size())
.mapToObj(i -> i == 0 ? '$' : chars.get(i))
.collect(Collectors.toList());
这个问题不适合使用 Java8 流来很好地解决。这里的一个缺点是它以线性时间运行,看起来我们使用 java8 对它进行了过度设计。相反,如果你直接修改你的数组或列表 chars[0] = '$';
,那么你只能在常数时间内完成。此外,命令式方法更紧凑、可读性更强,并且显然视觉上的困惑更少。我刚刚发布了 Java8 的实现方式,因为您已经明确要求这样做。但在我看来,对于这个特定实例,命令式方法要好得多。使用数组并设置第 0
索引,或者如果出于某种原因需要继续使用 List,请考虑使用 List.set相反,如上面的评论所述。
关于java - 如何使用 java 流仅替换 List<Character> 的第一个元素而不对列表的其余部分进行任何更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57901685/