从hashset< double>中提取整数

cfh9epnr  于 2021-06-30  发布在  Java
关注(0)|答案(4)|浏览(293)

我有一个 HashSet<Double> 我想从中提取整数元素,即小数点后全为零的元素。有标准的方法吗?我可以做些迂回的事,例如:给我一个双人包 x ,我可以查看小数点后的所有值,看它们是否都为零,但这似乎很复杂。

k4ymrczo

k4ymrczo1#

试试这个:

Collection<Integer> filterIntegers( final HashSet<Double> doubles )
{
    final var retValue = doubles.stream()
        .filter( d -> d.doubleValue() == d.intValue() )
        .map( Double::intValue )
        .collect( Collector.toSet() );
    return retValue;
}

显式比较 d 它的整数值在我看来是最精确的需求实现。无需反复考虑,无需进行数学运算(尽管所有这些都将提供相同的结果!)。

camsedfj

camsedfj2#

我猜你喜欢整数的结果,而不是双倍的结果。e、 g.7而不是7.0。
所以试试这个:

Set<Double> set = new HashSet<>();
    set.add(6.4);
    set.add(10.44);
    set.add(7.0);

    Set<Integer> filtered = set.stream()
            .filter(item -> Math.floor(item) == item)
            .map(Double::intValue)
            .collect(Collectors.toSet());

    System.out.println(filtered);
nkkqxpd9

nkkqxpd93#

你可以这样做:

HashSet<Double> hd = new HashSet<> ();
hd.add (3.5);
hd.add (2.0);
hd.add (3.444);
hd.add (-1.0);
Set<Double> filtered = hd.stream()
                         .filter (x -> (int)(double)x == x)
                         .collect (Collectors.toSet());
System.out.println (filtered);

输出:

[2.0, -1.0]

你得先把 Doubledouble 然后把它扔到一个 int . 如果那样的话 int 等于原来的 Double ,那个 Double 保存整数值。
如果要避免显式强制转换,可以更改

.filter (x -> (int)(double)x == x)

.filter (x -> x.intValue() == x)

也有同样的作用。

v9tzhpje

v9tzhpje4#

您可以将它们转换为整数,并将转换后的值与原始值相等

double d = 1.5;
if((int)d==d) // integer
else // not integer

相关问题