在两个列表中拆分Iterable

时间:2012-12-12 08:55:50

标签: java list collections loops iterable

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

  1. 使用标记"0"
  2. 输入A.
  3. 使用标记"1"
  4. 键入B

    因此,我能够检测哪个元素属于哪种类型,然后尝试为每个元素创建一个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似乎被第二个的值覆盖了。我该怎么说呢?因为当我查看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?或者将其转换为另一个Collection或其他方式?

0 个答案:

没有答案