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

Java 使用streams如何替换嵌套列表的值,java,java-stream,Java,Java Stream,在索引位置1的输入中遇到的前半个字符串将使用streams替换为字符“-”,我们如何执行这些操作 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.asLis

在索引位置1的输入中遇到的前半个字符串将使用streams替换为字符“-”,我们如何执行这些操作

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"));
List 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”),
数组。asList(“6”,“cd”);

我有上面的列表,我想用我这样做的循环将每个嵌套列表值的第一个位置替换为“-”

    int j=0;
    while(j <arr.size()/2){
        arr.get(j).set(1, "-");
        j++;

        }
intj=0;

虽然(j问题很模糊。最好也给出输出格式,以便有人能够理解您的需要并帮助您。但是基于一些假设和启发,我猜这就是您需要的。如果您需要不同的格式,请让我知道或相应地更改此答案

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

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());
List 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(收集器.toList())
.collect(Collectors.toList());

问题很模糊。最好也给出输出格式,以便有人能够理解您的需要并帮助您。但是,基于一些假设和启发,我猜这就是您需要的。如果您需要不同的格式,请让我知道或相应地更改此答案

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

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());
List 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(收集器.toList())
.collect(Collectors.toList());

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

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

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

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

你说的“字符串的前半部分”是什么意思?你能给出与本例相同的输出吗?到目前为止你尝试过做什么?我有上面的列表,我想用“-”替换每个嵌套列表值的第一个位置,使用循环,我已经这样做了int j=0;而(j)你说的是什么意思“字符串的前半部分”?您能给出与本例相同的输出吗?到目前为止您尝试了什么?我有上面的列表,我想用“-”替换每个嵌套列表值的第一个位置,使用我像int j=0这样做的循环;而(j)我有上面的列表,我想用“-”替换每个嵌套列表值的第一个位置,使用我像int j=0这样做的循环;而(j)我有上面的列表,我想用“-”替换每个嵌套列表值的第一个位置,使用我像int j=0这样做的循环;而(j