繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM