Java 8 stream流 实现字符串的全排列

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]
posted @ 2021-04-28 15:19  笨鸟贤妃  阅读(353)  评论(0)    收藏  举报