代码之家  ›  专栏  ›  技术社区  ›  Alvin

如何在列表中获取连续值对?

  •  0
  • Alvin  · 技术社区  · 6 年前

    我想通过一个数组循环获得连续值对:

    List values = Arrays.asList("A", "B", "C");
    ListIterator<String> it = values.listIterator();
    while(it.hasNext()) {
          String start = it.previous();
          String end = it.next();
    }
    

    我如何得到:

    A, B
    B, C
    
    4 回复  |  直到 6 年前
        1
  •  5
  •   deHaar    6 年前

    你可以用经典的 for 循环如下:

    public static void main(String[] args) {
        List<String> values = Arrays.asList("A", "B", "C");
        /*
         * You obviously want to output 2 values per iteration,
         * that means you have to adjust the condition to iterate to the
         * second last index (because of accessing i + 1)
         */
        for (int i = 0; i < values.size() - 1; i++) {
            System.out.println(values.get(i) + ", " + values.get(i + 1));
        }
    }
    

    不需要使用迭代器,我强烈建议不要只使用 List (原始类型) List<String> (指定项类型)。

        2
  •  4
  •   simhumileco Janarthanan Ramu    6 年前

    试试这个:

    List<String> values = Arrays.asList("A", "B", "C");
    ListIterator<String> it = values.listIterator();
    while(it.hasNext()) {
        String start = it.next();
        if(it.hasNext()) {
            String end = it.next();
            it.previous();
            System.out.println(start + end);
        }
    }
    
        3
  •  1
  •   jokster    6 年前

    简单地将前一个值存储在本地var中如何?

    List<String> values = Arrays.asList("A", "B", "C");
    Iterator<String> it = values.iterator();
    if (it.hasNext()) {
        String start = it.next();
        for(String end = null; it.hasNext(); start = end) {
          end = it.next();
        }
    }
    
        4
  •  0
  •   Level_Up    6 年前

    如果您使用Java 8或更大版本,您也可以尝试:

    public static void main(String[] args) {
        List<String> values = Arrays.asList("A", "B", "C");
    
        IntStream.range(0, values.size() - 1)
            .forEach(i -> System.out.println(values.get(i) + ", " + values.get(i + 1)));
    
    }
    

    这里是使用的流,它将从 0 (包括) values.size() - 1 (exclusive)之后,它将用于接收带有一个参数(在本例中是循环整数)的使用者的foreach,然后只打印结果。我知道它几乎和迭代循环一样,但我想证明它也可以这样做。

    祝你好运!