我从一个包含两种类型数据的方法中接收到一个 Iterable。
- 带标签的 A 型
"0"
- 带标签的 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?或者将其转换为另一个集合或其他方式?