[英]Using streams and lambda expressions to replace a nested for loop to enter into a nested list
[英]Using streams how to replace a value of the nested list
在索引位置1的输入中遇到的字符串的前半部分将使用流用字符“-”替换,我们如何执行操作?
List<List<String>> arr = Arrays.asList(Arrays.asList("0", "ab"), Arrays.asList("6", "cd"),
Arrays.asList("0", "ef"), Arrays.asList("6", "gh"),
Arrays.asList("4", "ij"), Arrays.asList("0", "ab"),
Arrays.asList("6", "cd"));
我有上面的列表,我想使用这样的循环将每个嵌套列表值的第一位置替换为“-”
int j=0;
while(j <arr.size()/2){
arr.get(j).set(1, "-");
j++;
}
样本输出:[[0,-],[6,-],[0,-],[6,gh],[4,ij],[0,ab],[6,cd]]
但是任何人都可以解释如何使用流来实现相同的目的
问题很模糊。 最好也提供输出格式,以便某人可以了解您的需求并为您提供帮助。 但是,基于一些假设和启发式方法,我猜想这是您所需要的。 如果您希望使用其他格式,请告诉我或相应地更改此答案。
另一点是,到目前为止您还没有尝试过。 您必须先尝试一下,并在问题发布时提及自己的所作所为。
List<List<String>> formattedStrings = source.stream()
.map(sl -> IntStream.range(0, sl.size())
.mapToObj(i -> i == 1 ? sl.get(i).charAt(0) + "-" + sl.get(i).charAt(1) : sl.get(i))
.collect(Collectors.toList()))
.collect(Collectors.toList());
我不会使用Stream
来做到这一点,在子列表上工作会更简单:
arr.subList(0, arr.size() / 2).forEach(s -> s.set(1, "-"));
如果确实需要使用流(例如,如果要执行其他过滤和映射操作),则可以使用IntStream
来处理索引:
IntStream.range(0, arr.size() / 2)
.forEach(j -> arr.get(j).set(1, "-"));
或仅通过限制您处理的条目数即可:
arr.stream()
.limit(arr.size() / 2)
.forEach(s -> s.set(1, "-"));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.