使用流将在索引位置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]] < / p>
但是任何人都可以解释如何使用流实现相同的目的
答案 0 :(得分:1)
问题很模糊。最好也提供输出格式,以便某人可以了解您的需求并为您提供帮助。但是,基于一些假设和启发式方法,我猜想这是您所需要的。如果您希望使用其他格式,请告诉我或相应地更改此答案。
这里的另一点是到目前为止您还没有尝试过。您必须预先尝试一下,并在问题发布时提及自己的所作所为。
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());
答案 1 :(得分:1)
我不会使用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, "-"));