【发布时间】:2020-11-18 01:35:28
【问题描述】:
目前,我正在使用相同的 lambda 表达式学习 distinct() 的功能: 第一个用于查找整数的不同数字
Integer intVar = 12341234;
long c1 = intVar.toString().chars().distinct().count(); // (1,2,3,4)
System.out.println(c1);//result = 4
然后我想尝试在一个范围内找到相同的东西, 我的想法是:
1.loop from 1 to 1_000_000
2.filter isSquareNumber && <= 9_999_999 && 1_000_000
3.convert to char
4.distinct
5.store as list(key,value)
6.findfirst key with value=7
因为原始代码有效但看起来很糟糕
int inte = IntStream.iterate(1, i-> i + 1)
.filter(i->isSquareNumber(i) && i<= 9999999 && i>=1000000)
.filter(i-> i%10!=i/10%10 && i%10!=i/100%10 && i%10!=i/1000%10 && i%10!=i/10000%10 && i%10!=i/100000%10 && i%10!=i/1000000%10)
.filter(i-> i/10%10!=i/100%10 && i/10%10!=i/1000%10 && i/10%10!=i/10000%10 && i/10%10!=i/100000%10 && i/10%10!=i/1000000%10)
.filter(i-> i/100%10!=i/1000%10 && i/100%10!=i/10000%10 && i/100%10!=i/100000%10 && i/100%10!=i/1000000%10)
.filter(i-> i/1000%10!=i/10000%10 && i/1000%10!=i/100000%10 && i/1000%10!=i/1000000%10)
.filter(i-> i/10000%10!=i/10%10 && i/10000%10!=i/100000%10)
.filter(i-> i/100000%10!=i/1000000%10)
.findFirst()
.getAsInt();
System.out.println(inte);//result = 1034289
WJS 帮助版
IntStream
.iterate(1, i-> i + 1)
.filter(i->isSquareNumber(i) && i<= 9999999 && i>=1000000)
.mapToObj(i->new String[] {Integer.toString(i), Arrays
.stream(Integer.toString(i).split(""))
.filter(a -> a[1].length() >= 7)
.findFirst()
.ifPresent(a -> System.out
.println(a[1] + " --> " + a[1].length()));
效果很好。现在我正尝试再迈出一步,创建一个方法,其中返回类型是整数并返回最不同的数字整数,而不是布尔值。
【问题讨论】:
-
“在一个范围内找到相同的东西”是什么意思?你能给出一些输入和输出的例子吗,就像你用一个整数做的那样?
-
@Sweeper 输入:1 输出:1 输入:12 输出:2 输入:121 输出:2 // 1 出现两次,2 出现一次,依此类推
-
@Sweeper 哦,这意味着我想对从 1 到 1000000 等的所有整数做同样的事情
-
您想找出 10 M 以下的第一个数字,它是一个正方形,由七个不同的数字组成?
-
@Bohemian 是的,它用于查找7个不同的数字,甚至更多,它可以首先确定有多少个不同的数字,然后存储为数组或变量以供进一步使用。