2 種類のデータを含むメソッドから 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 が 2 番目の値で上書きされているように見えることです。どうすればこれを伝えることができますか? 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);
}
Iterable の代わりに、ArrayList を値に使用しました。Iterable を要素で埋める方法はありますか? または、それを別のコレクションに変換するか、それ以外の方法で変換しますか?