在每个列表元素之间插入元素

4
有没有比在Java中迭代列表更好的方法,在每对元素之间插入一个元素?
List<Integer> exampleInts = new ArrayList<>(Arrays.asList(1,2,3,5,8,13,21)); 

for (int i = 1; i < exampleInts.size(); i++) {
    int delimiter = 0; 
    exampleInts.add(i, delimiter);
    i++;
} 

你正在使用哪个版本的Java? - Harshit Gupta
这里你没有遍历列表的元素。你是从1到exampleInts.size()循环...这不是在遍历列表。此外,这段代码并没有做你要求的事情:它在原始列表的第一个和第二个元素之间添加了分隔符。 - Davide Lorenzo MARINO
3个回答

3

不,标准java库中没有现成的工具可以做到这一点。

顺便说一下,你的循环是不正确的,并且会一直运行直到内存耗尽。你应该再将i变量增加一次:

    for (int i = 1; i < exampleInts.size(); i++) {
        int delimiter = 0;
        exampleInts.add(i, delimiter);
        i++;
    }

或者将循环条件更改为for (int i = 1; i < exampleInts.size(); i+=2) {


0

尝试这个解决方案,它可以正常工作。

List<Integer> exampleInts = new ArrayList<>(Arrays.asList(1, 2, 3, 5,
            8, 13, 21));
    int size = (exampleInts.size()-1)*2;
    for (int i = 0; i < size; i+=2) {
        int delimiter = 0;
        exampleInts.add(i+1, delimiter);
    }
    System.out.println(exampleInts);

@PKuhn 试试这个解决方案。 - Harshit Gupta
你的程序结果是 [1, 0, 2, 0, 3, 0, 5, 0, 8, 0, 13, 0, 21, 0],但由于最后一个零的存在,结果并不正确。顺便说一下:我不是投票者。 - Tom

0
在JDK 8+中,您可以这样做:
private static List<Integer> insert(List<Integer> list, int delimiter) {
    return list.stream().flatMap(i -> Stream.of(i, delimiter)).limit(list.size() * 2 - 1).toList();
}

使用示例:

System.out.println(insert(List.of(1, 2, 3, 5, 8, 13, 21), 0).stream().map(String::valueOf)
            .collect(Collectors.joining(", ")));

输出结果为:

1, 0, 2, 0, 3, 0, 5, 0, 8, 0, 13, 0, 21

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接