打印从1到10 ^ n的所有整数,其中包含唯一数字

Dig*_*tal 3 java java-8

我有一个工作示例来打印唯一的数字(即123有唯一的数字但11没有)

下面是代码

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter any number : ");
int n = Integer.parseInt(br.readLine());
double val = Math.pow(10, n);
List<Integer> list = new ArrayList<>(); 
for(int k=1;k<=val;k++){
    String s = Integer.toString(k);
    if(s.length() == 1){
        list.add(k); 
    } else{
        int l = s.length();
        int flag = 0;
        for (int i = 0; i < l - 1; i++) {
            for (int j = i + 1; j < l; j++) {
                if (s.charAt(i) == s.charAt(j)) {
                    flag = 1;
                    break; 
                }
            }
        } if(flag == 0){
            list.add(k); 
        }
    }
}
System.out.println(list);
Run Code Online (Sandbox Code Playgroud)

如何使用java8有效地编写上面的代码?

Nic*_*tto 7

它可以改写为下一个:

List<Integer> list = IntStream.range(1, (int) val + 1)
    .filter(
        i -> Integer.toString(i).chars().distinct().count() == Integer.toString(i).length()
    )
    .boxed()
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

  • 它是一个IntStream,所以是一个原始类型int的流,你想要一个列表,因为你不能有一个List <int>你需要先将它们打包以获得Integer (3认同)