【问题标题】:forEach clause to iterate through indexes of a VectorforEach 子句遍历 Vector 的索引
【发布时间】:2019-08-29 07:49:21
【问题描述】:

我有这样的方法:

public void addVector(Vector myVector) {
    if (myVector == null) {
        return;
    }

    Collection<String> values = new ArrayList<>();

    for (int i = 0; i < myVector.size(); i++) {
        values.add(((String[]) myVector.get(i))[1]);
    }

    this.addItems(values);
}

对于我的一生,我无法弄清楚如何从中创建一个 forEach 子句。 是否可以在 forEach 循环中遍历索引 [i]?

【问题讨论】:

    标签: java for-loop if-statement vector foreach


    【解决方案1】:

    如果使用增强的 for 循环,则不需要索引:

    for (Object obj : myVector) {
        values.add(((String[]) obj)[1]);
    }
    

    当然最好使用参数化类型 (Vector&lt;String[]&gt;) 并避免强制转换。

    或者,如果您指的是实际的 forEach 方法:

    myVector.forEach(o -> values.add(((String[]) o)[1]));
    

    或者,更好的是,使用Streamcollect 而不是forEach

    List<String> values = 
        myVector.stream()
                .map(o -> (String[]) o)[1])
                .collect(Collectors.toList());
    

    【讨论】:

      【解决方案2】:

      您不需要索引,您可以简单地迭代值,如下所示:

      vector.forEach(el -> values.add(((String[]) el)[1]));
      

      【讨论】:

        【解决方案3】:

        或者你可以这样做

         List<String> values = new ArrayList<>(myVector);
        

        更新

        如果向量包含字符串数组,则需要对其进行映射

        List<String> values = myVector.stream().map(arr -> { return arr.length <= 1 ? null : arr[1];}).collect(Collectors.toList());
        

        【讨论】:

        • 这在 OP 使用 Vector&lt;String&gt; 时有效,但 OP 似乎在使用 Vector&lt;String[]&gt;(但作为原始类型)。所需的结果似乎是一个列表,其中包含位于每个数组的索引 1 处的每个 String
        猜你喜欢
        • 2021-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-05
        相关资源
        最近更新 更多