我有一个 HashSet<Double> 我想从中提取整数元素,即小数点后全为零的元素。有标准的方法吗?我可以做些迂回的事,例如:给我一个双人包 x ,我可以查看小数点后的所有值,看它们是否都为零,但这似乎很复杂。
HashSet<Double>
x
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 它的整数值在我看来是最精确的需求实现。无需反复考虑,无需进行数学运算(尽管所有这些都将提供相同的结果!)。
d
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);
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]
你得先把 Double 至 double 然后把它扔到一个 int . 如果那样的话 int 等于原来的 Double ,那个 Double 保存整数值。如果要避免显式强制转换,可以更改
Double
double
int
.filter (x -> (int)(double)x == x)
到
.filter (x -> x.intValue() == x)
也有同样的作用。
v9tzhpje4#
您可以将它们转换为整数,并将转换后的值与原始值相等
double d = 1.5; if((int)d==d) // integer else // not integer
4条答案
按热度按时间k4ymrczo1#
试试这个:
显式比较
d
它的整数值在我看来是最精确的需求实现。无需反复考虑,无需进行数学运算(尽管所有这些都将提供相同的结果!)。camsedfj2#
我猜你喜欢整数的结果,而不是双倍的结果。e、 g.7而不是7.0。
所以试试这个:
nkkqxpd93#
你可以这样做:
输出:
你得先把
Double
至double
然后把它扔到一个int
. 如果那样的话int
等于原来的Double
,那个Double
保存整数值。如果要避免显式强制转换,可以更改
到
也有同样的作用。
v9tzhpje4#
您可以将它们转换为整数,并将转换后的值与原始值相等