我从一个包含两种类型数据的方法中收到一个Iterable。
"0"
"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似乎被第二个的值覆盖了。我该怎么说呢?因为当我查看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或其他方式?