import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Pailiezuhe {
public static void main(String[] args) {
List<String> list = Arrays.asList("abcd".split(""));
System.out.println(permutationNoRepeat(list, 2));
}
//list是返回的结果集,length是要组合的字符串长度
public static List<String> permutationNoRepeat(List<String> list, int length) {
Stream<String> stream = list.stream();
for (int i = 1; i < length; i++) {
stream = stream.flatMap(s -> list.stream().filter(aChar -> !s.contains(aChar)).map(aChar -> s.concat(aChar)));
}
return stream.collect(Collectors.toList());
}
}
运行结果
//length=2
[ab, ac, ad, ba, bc, bd, ca, cb, cd, da, db, dc]
//length=3
[abc, abd, acb, acd, adb, adc, bac, bad, bca, bcd, bda, bdc, cab, cad, cba, cbd, cda, cdb, dab, dac, dba, dbc, dca, dcb]
该博客展示了如何使用Java的Stream API实现不重复的全排列组合。代码通过迭代和过滤操作,生成给定字符串列表中所有可能的组合,分别展示了长度为2和3的组合示例,如[ab, ac, ad, ba, bc, bd, ...]等。这有助于理解Java编程中组合和全排列的概念。
1230

被折叠的 条评论
为什么被折叠?



