以前實現笛卡爾積比較繁瑣,使用java8的新特性提高了代碼的簡潔度,也更容易實現
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author lgz
*/
public class DescartesDemo {
public static void main(String[] args) {
List<String> colorList = Arrays.asList("紅色", "黑色", "金色");
List<String> sizeList = Arrays.asList("32G", "64G");
List<String> placeList = Arrays.asList("國產", "進口");
List<String> descartesList = descartes(colorList, sizeList, placeList);
descartesList.forEach(System.out::println);
}
public static List<String> descartes(List<String>... lists) {
List<String> tempList = new ArrayList<>();
for (List<String> list : lists) {
if (tempList.isEmpty()) {
tempList = list;
} else {
//java8新特性,stream流
tempList = tempList.stream().flatMap(item -> list.stream().map(item2 -> item + " " + item2)).collect(Collectors.toList());
}
}
return tempList;
}
}
運行結果
紅色 32G 國產
紅色 32G 進口
紅色 64G 國產
紅色 64G 進口
黑色 32G 國產
黑色 32G 進口
黑色 64G 國產
黑色 64G 進口
金色 32G 國產
金色 32G 進口
金色 64G 國產
金色 64G 進口