同じ配列内の2つの要素を組み合わせる方法?

塩:

私は、次のような含まれている2次元配列を持っています

         String[][] twodarray = { { "grey", "value1", "beta"  },
                                 { "r", "name", "gender" , "value", "Female"  },
                                { "r", "name", "gender", "value", "Male" },
                                { "r", "name", "exp", "value", "1" },
                                { "r", "name", "exp", "value", "2"  }, 
                                { "red", "value1", "alpha"  },
                                { "blue", "value2", "alpha"  }, 
                        };

私の目標は、2つの以上の要素[A]がある場合は[0]と[A] [2]は同じですが、それは一緒にグループ意志と一つとしての要素を兼ね備えています。

例えば、[1] [0]、[2] [0]、R及び[1] [2]及び[2] [2]、性別が同じです。

以下に示すようにこのようにして、それを1つに結合します。

{ "r", "name", "gender" , "value", "Female", "Male" },

このように、私の所望の出力は以下の通りです

      final output:
          results = { { "grey", "value1", "beta"  },
                    { "r", "name", "gender" , "value", "Female", "Male" },
                    { "r", "name", "exp", "value", "1", "2"  }, 
                    { "red", "value1", "alpha"  },
                    { "blue", "value2", "alpha"  }, 
                  };

私が持っていることは以下の通りです

                for (int a=0; a < twodarray.length-1; a++)
                {
                    if ((twodarray[a][0] == twodarray[a+1][0]) && (twodarray[a][2] == twodarray[a+1][2]))
                }
    }

私の質問は、私のような配列を組み合わせることができますどのようにでしょうか?

すべてのヘルプははるかに高く評価されます。

パトリック・パーカー:

まず、私はに行を収集しているMap<List<String>, List<String>>接頭辞(最後の文字列以外のすべての文字列)でのグループ最終的な値(最後の文字列)。それからバック2D文字列配列形式にマップエントリを収集します。

package samplejava;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class SampleJava {
public static void main(String[] args) {
    String[][] twodarray = { { "grey", "value1", "beta"  },
                                { "r", "name", "gender" , "value", "Female"  },
                                { "r", "name", "gender", "value", "Male" },
                                { "r", "name", "exp", "value", "1" },
                                { "r", "name", "exp", "value", "2"  }, 
                                { "red", "value1", "alpha"  },
                                { "blue", "value2", "alpha"  }, 
                        };
    Map<List<String>, List<String>> groups;
    groups = Arrays.stream(twodarray).collect(Collectors.groupingBy(
            (String[] item)-> Arrays.asList(item).subList(0, item.length - 1),
            Collectors.mapping(
                    (String[] item)-> item[item.length - 1],
                    Collectors.toList())));
    String[][] result = groups.entrySet().stream()
            .map(entry -> Stream.concat(entry.getKey().stream(),
                                        entry.getValue().stream())
                    .toArray(String[]::new))
            .toArray(String[][]::new);
    for(String[] row: result) {
        System.out.println(Arrays.toString(row));
    }
}
}

しかし、この方法では、アイテムの元の順序を保持しません。しかし、あなたはそれが必要だった言いませんでした。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=221113&siteId=1