gpt4 book ai didi

java - 如何找出 IntStream 中缺少哪些数字

转载 作者:行者123 更新时间:2023-12-01 16:42:56 25 4
gpt4 key购买 nike

我想返回一个由未出现在任何参数数字中的数字(按升序排列)组成的字符串。我不知道该怎么做,但我想使用 long 作为比较器来找出 IntStream 中丢失的数字。

例如,如果numeros = [1201, 23045],我必须返回“6789”

我的代码:

public static String digitosQueNoEstanEn(List<Long> numeros)
{
long n = 1234567890;
IntStream numStream = numeros.stream()
.map(c -> c.toString())
.flatMapToInt(c -> c.chars())
.distinct();

最佳答案

这个问题有很多解决方案,其中之一就是简单的集合移除。您本质上是希望从有效数字集中删除所有使用过的数字,并将结果存储为 String。这可以通过以下方式完成:

public static String digitosQueNoEstanEn(List<Long> numeros) {
Set<Integer> usedDigits = numeros.stream()
.map(String::valueOf)
.flatMapToInt(String::chars)
.map(c -> Character.digit(c, 10))
.boxed()
.collect(Collectors.toSet());

return IntStream.range(0, 10)
.filter(i -> !usedDigits.contains(i))
.sorted()
.mapToObj(Integer::toString)
.collect(Collectors.joining());
}

当使用 [1201L, 23045L] 示例调用时,输出是您所期望的:

6789
<小时/>

安迪·特纳还提到 using a BitSet可能是一个可行的解决方案。如果您选择使用其中一种,您的解决方案可能如下所示:

public static String digitosQueNoEstanEn(List<Long> numeros) {
BitSet bitSet = BitSet.valueOf(new long[] { 0b0011_1111_1111 });

numeros.stream()
.map(String::valueOf)
.flatMapToInt(String::chars)
.map(c -> Character.digit(c, 10))
.forEach(bitSet::clear);

return bitSet.stream()
.sorted()
.mapToObj(Integer::toString)
.collect(Collectors.joining());
}

关于java - 如何找出 IntStream 中缺少哪些数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59843621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com