0

2 種類のデータを含むメソッドから 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 が 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 を要素で埋める方法はありますか? または、それを別のコレクションに変換するか、それ以外の方法で変換しますか?

4

0 に答える 0