Dapatkan produk Cartesian?

Saya punya dua daftar:

List<Integer> partnerIdList;
List<Integer> platformIdList;

Saya perlu mendapatkan produk Cartesian dari daftar tersebut sebagai berikut:

List<Pair<Integer, Integer> > partnerPlatformPairList;

Dimana Pair adalah kelas dari paket org.apache.commons.lang3.tuple.Pair.

Bagaimana saya bisa melakukannya dengan mudah? Apakah ada beberapa di perpustakaan Apache-commons?


person St.Antario    schedule 18.05.2015    source sumber
comment
Sesuatu seperti cartesianProduct di docs .guava-libraries.googlecode.com/git/javadoc/com/google/ semoga bermanfaat bagi anda   -  person Laurentiu L.    schedule 18.05.2015
comment
Silakan Rujuk untuk solusi serupa: [Produk Cartesian dari Daftar Daftar di Java] [1] [1]: stackoverflow.com/questions/9591561/   -  person Balkrishan Aggarwal    schedule 18.05.2015


Jawaban (2)


Jika Anda tidak ingin menggunakan solusi eksternal, perpustakaan, Anda dapat menulis versi Anda sendiri dalam kode:

public static <T, U> List<Pair<T, U>> cartesianProduct(List<T> list1, List<U> list2) {
    List<Pair<T, U>> result = new ArrayList<>();
    for (T el1: list1) {
        for (U el2 : list2) {
            result.add(Pair.of(el1, el2));
        }
    }
    return result;
}
person Dmitry Ginzburg    schedule 18.05.2015

Ada kode github. Anda dapat memeriksanya. Ini pada dasarnya berjalan, for-loop berdasarkan jumlah daftar dan jumlah daftar. Ini akan mengurangi upaya pengkodean Anda, tetapi dasar-dasarnya tetap sama.

or

Gunakan kode berikut

for (int i = 0; i < partnerIdList.size(); i++)
        for (int j = 0; j < platformIdList.size(); j++)
            partnerPlatformPairList.add(new Pair<Integer, Integer>(partnerIdList.get(i), platformIdList.get(j)));
person Abhishek    schedule 18.05.2015