Получить декартово произведение?

У меня есть два списка:

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

Мне нужно получить декартово произведение из этого списка следующим образом:

List<Pair<Integer, Integer> > partnerPlatformPairList;

Где Pair — это класс из пакета org.apache.commons.lang3.tuple.Pair.

Как я могу легко это сделать? Есть ли что-то в библиотеке apache-commons?


person St.Antario    schedule 18.05.2015    source источник
comment
Что-то вроде cartesianProduct в документах .guava-libraries.googlecode.com/git/javadoc/com/google/ может быть вам полезен   -  person Laurentiu L.    schedule 18.05.2015
comment
Пожалуйста, обратитесь к аналогичному решению: [Декартово произведение списка списков в Java][1] [1]: stackoverflow.com/questions/9591561/   -  person Balkrishan Aggarwal    schedule 18.05.2015


Ответы (2)


Если вы не хотите использовать внешние решения, библиотеки, вы можете написать свою версию в коде:

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

Существует код github. Вы можете заглянуть в него. В основном он работает, for-loop на основе количества списков и количества списков. Это уменьшит ваши усилия по кодированию, но основы останутся прежними.

or

Используйте следующий код

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