listOne = {1 2 3} listTwo = {7 8 9}
resultantList = {{1,2,7},{1,2,8},{1,2,9},{2,3,7},{2,3,8},{2,3 ,9},{1,3,7},{1,3,8},{1,3,9}}
我想用第一个列表中的2个元素和第二个列表中的一个元素组合创建第二个列表。
答案 0 :(得分:1)
leftList.stream()
.flatMap(x -> x.stream().map(y -> new Pair(x, y))
.collect(Collectors.toList());
好像你需要这个:
List<Integer> left = Arrays.asList(1, 2, 3);
List<Integer> right = Arrays.asList(7, 8, 9);
IntStream.range(0, left.size())
.boxed()
.flatMap(x -> left.stream().skip(x + 1).map(y -> new int[] { left.get(x), y }))
.flatMap(arr -> right.stream().map(z -> new int[] { arr[0], arr[1], z }))
.map(Arrays::toString)
.forEach(System.out::println);
// [1, 2, 7]
// [1, 2, 8]
// [1, 2, 9]
// [1, 3, 7]
// [1, 3, 8]
// [1, 3, 9]
// [2, 3, 7]
// [2, 3, 8]
// [2, 3, 9]
答案 1 :(得分:0)
我做了一个有效的解决方案,请在下面找到。
public class TestClass {
static ArrayList<ArrayList<Integer>> fullData = new ArrayList<>();
static ArrayList<ArrayList<Integer>> finalList = new ArrayList<>();
static int listTwocounter = 0;
public static void main(String[] args) {
int listOne[] = {1, 2, 3};
int listTwo[] = {7, 8, 9};
int listOneCombination = 2;
int listOneSize = 3;
printCombination(listOne, listTwo, listOneSize, listOneCombination);
}
static void printCombination(int listOne[], int listTwo[], int n, int r)
{
// A temporary array to store all combination one by one
int data[] = new int[5];
// Print all combination using temprary array 'data[]'
combinationUtil(listOne, listTwo, data, 0, n-1, 0, r);
//fullData
// Add elements from 2nd list
for (ArrayList<Integer> temp : fullData)
{
for(int i=0; i<listTwo.length; i++)
{
ArrayList<Integer> local = new ArrayList<>();
for(int x : temp)
local.add(x);
local.add(listTwo[i]);
finalList.add(local);
}
}
}
static void combinationUtil(int listOne[], int listTwo[], int data[], int start, int end,
int index, int r)
{
ArrayList<Integer> tempData;
if (index == r)
{
tempData = new ArrayList<>();
for (int j=0; j<r; j++)
tempData.add(data[j]);
fullData.add(tempData);
return;
}
for (int i=start; i<=end && end-i+1 >= r-index; i++)
{
data[index] = listOne[i];
combinationUtil(listOne, listTwo, data, i+1, end, index+1, r);
}
}
}
希望这会有所帮助。如果这符合您的要求,请告诉我。 : - )