0

我从一个包含两种类型数据的方法中接收到一个 Iterable。

  1. 带标签的 A 型"0"
  2. 带标签的 B 型"1"

因此,我能够检测到哪个元素属于哪个类型,然后尝试为每个元素创建一个 ArrayList 并将相应的数据转储到其中。

List<TextPair> valuesA = new ArrayList<TextPair>();
List<TextPair> valuesB = new ArrayList<TextPair>();

这是我尝试这样做的方法:

for (TextPair value : values) {
    if(value.getSecond().toString().equals("0"))
        valuesA.add(value);
    else 
        valuesB.add(value);
}

问题是第一个 List 似乎被第二个 List 的值覆盖了。我怎么能告诉这个?因为当我查看 valuesA 和 valuesB 中的元素时,它们是相同的,并且两个值都带有标签“1”。我丢失了所有带有“0”标签的值。我不知道为什么会发生这种情况,也找不到解决方法。

我的最终目标是将标签“0”的每个元素与标签“1”的元素进行比较。我尝试在不拆分可迭代对象的情况下执行此操作,但由于我只能向前遍历可迭代对象,因此我只能将第一个元素与“0”进行比较,并且由于无法迭代回来而丢失了其余元素。由于 Iterable 是从框架(Hadoop)提供的,因此我没有机会使用 Iterable 之外的其他集合类型。那么,有什么想法吗?


现在我正在添加一个工作代码示例,但未使用 Hadoop 框架进行测试:

    public static void main(String[] args) {
    List<TextPair> values = new ArrayList<TextPair>();
    values.add(new TextPair("cdr0", "0"));
    values.add(new TextPair("att0", "1"));
    values.add(new TextPair("cdr1", "0"));
    values.add(new TextPair("att1", "1"));
    values.add(new TextPair("cdr2", "0"));
    values.add(new TextPair("att2", "1"));

     List<TextPair> valuesA = new ArrayList<TextPair>();
     List<TextPair> valuesB = new ArrayList<TextPair>();

     for(TextPair value : values)
     {
         if(value.getSecond().toString().equals("0"))
             valuesA.add(value);
         else
             valuesB.add(value);
     }

     for(TextPair valueA : valuesA)
         System.out.println("valueA: " + valueA);

     for(TextPair valueB : valuesB)
         System.out.println("valueB: " + valueB);
}

我使用 ArrayList 代替 Iterable 作为值。有没有办法用元素填充 Iterable?或者将其转换为另一个集合或其他方式?

4

0 回答 0