【问题标题】:Using streams how to replace a value of the nested list使用流如何替换嵌套列表的值
【发布时间】:2018-09-27 02:44:18
【问题描述】:

在索引位置 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]]

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

【问题讨论】:

  • “字符串的前半部分”是什么意思?对于这个例子,你能否给出你期望的相同输出?到目前为止,您尝试过什么?
  • 我有上面的列表,我想用“-”替换每个嵌套列表值的第一个位置,使用我已经完成的循环 int j=0; while(j

标签: java java-stream


【解决方案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());

【讨论】:

  • 我有上面的列表,我想用“-”替换每个嵌套列表值的第一个位置,使用我已经完成的循环 int j=0; while(j
【解决方案2】:

我不会使用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, "-"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 2016-04-03
    • 2023-03-27
    • 1970-01-01
    • 2021-10-11
    相关资源
    最近更新 更多