使用流如何替换嵌套列表的值

时间:2018-09-27 02:44:18

标签: java java-stream

使用流将在索引位置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>

但是任何人都可以解释如何使用流实现相同的目的

2 个答案:

答案 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, "-"));