我有两个清单:
List<Integer> partnerIdList;
List<Integer> platformIdList;
我需要获得这些列表中的笛卡尔积,如下所示:
List<Pair<Integer, Integer> > partnerPlatformPairList;
其中Pair
是org.apache.commons.lang3.tuple.Pair
包中的一个类。
我怎样才能轻松做到这一点? apache-commons库中有一些吗?
答案 0 :(得分:2)
有一个github code。你可以调查一下。它基本上根据列表和列表计数来运行for-loop
。它将减少您的编码工作量,但基本原则保持不变。
或
使用以下代码
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)));
答案 1 :(得分:1)
如果您不想使用外部解决方案库,您可以在代码中编写自己的版本:
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;
}
答案 2 :(得分:1)
public void cartesian() {
List<Integer> array1 = new ArrayList<Integer>();
List<Integer> array2 = new ArrayList<Integer>();
List<Pair<Integer, Integer>> partnerPlatformPairList = new ArrayList<Pair<Integer, Integer>>();
for (int i = 0; i < array1.size(); i++)
for (int j = 0; j < array2.size(); j++)
partnerPlatformPairList.add(new Pair<Integer, Integer>(array1.get(i), array2
.get(j)));
}
答案 3 :(得分:1)
import java.util.ArrayList;
import java.util.List;
public class Track {
public static void main(String x[]) {
List<Integer> partnerIdList=new ArrayList<Integer>();
List<Integer> platformIdList=new ArrayList<Integer>();
for(int i=2;i<5;i++){
partnerIdList.add(i);
platformIdList.add(i*i);
}
List<Pair<Integer, Integer> > partnerPlatformPairList=new ArrayList<Pair<Integer, Integer>>();
for(Integer partnerId:partnerIdList){
for(Integer platformId:platformIdList){
partnerPlatformPairList.add(new Pair(partnerId,platformId));
}
}
for(Pair pair:partnerPlatformPairList){
System.out.println(pair);
}
}
}
class Pair<Integer1, Integer2>{
Integer partnerId;
Integer platformId;
Pair(Integer partnerId, Integer platformId){
this.partnerId=partnerId;
this.platformId=platformId;
}
@Override
public String toString() {
return partnerId+" - "+ platformId;
}
}