当前位置: 首页 > 知识库问答 >
问题:

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

公冶鸣
2023-03-14

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

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

共有2个答案

耿弘阔
2023-03-14

我不会使用来实现这一点,使用子列表会更简单:

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, "-"));
咸昊昊
2023-03-14

这个问题含糊不清。最好给出输出格式,这样有人就可以理解你需要什么并帮助你。然而,基于一些假设和启发式,我猜这就是你需要的。如果您想要不同的格式,请让我知道或相应地更改此答案。

这里的另一点是,到目前为止,您尝试了什么还不清楚。你必须先试一试,并在问题发布时提及你做了什么。

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());
 类似资料:
  • 我正在使用两个for循环将下面的对象结构列表转换为一个HashMap,如下所示。 我如何使用lambdas/streams做同样的事情呢?我试过用平面地图,但没用。流式传输时无法访问嵌套得注册区域. 基于@Nidhish Krishnan答案更新工作代码示例

  • 使用JSF 2.0,我需要显示一个表,其中每一行都包含一个打开弹出窗口的链接。我有两种型号:

  • 问题内容: 我有一段代码,但是我想提高性能。我的代码是: matrix2是4维np数组,而matrix1是2d数组。 我想通过使用np.tensordot(matrix1,matrix2)加快此代码的速度,但是后来我迷路了。 问题答案: 您可以只使用jit编译器 您的解决方案一点也不差。我唯一更改的是索引和变量循环范围。如果您有numpy数组和过多的循环,则可以使用编译器(Numba),这确实很简

  • 在我的Android客户端中,我从后端接收JSON数据: 下面是实际加载数据的例程。我正在使用RxAndroid并在这里进行改装。 如何映射内部列表 最后,我想收到这个:

  • 我有一个类,有多个成员。 还有一个类,只有两个属性: 我需要遍历类中的各种列表,并创建类对象,并添加到这样的列表中: 这里重复了if和for循环。 如何使用Java流实现这一点? 注意:类,和之间没有关系,也没有公共接口。

  • 我正在寻找一种用函数式编程方法替换嵌套foreach循环的方法。情况是这样的: 目前我的代码是这样的: 这将生成如下所示的输出: 有谁知道如何用函数式编程替代方案替换foreach代码块?