目前,我正在学习在同一个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()));
它工作得很好。现在我尝试再移动一步,创建一个方法,其中返回类型是整数,返回最明显的数字整数,但不是布尔值。
2条答案
按热度按时间oewdyzsn1#
试试这个。我将其限制为前10个值。
maptoobj创建一个字符串数组。
第一项是原值。
下一个将拆分字符串,消除重复项并重新连接到新字符串
印刷品
找到第一个有7个不同数字的数字。
在上一个示例中创建数组之后,替换
forEach
使用筛选器,后跟findfirst,然后打印值(如果存在)。印刷品
46qrfjad2#
要查找所有具有至少7个不同数字的正方形数字,请执行以下操作:
只找到第一个(或尝试爆炸,但有123个):
我不是迭代每个数字,而是迭代平方根,然后平方它,这样效率会更高。