我正在开发一个Java应用程序,我有两个不同的强类型数组。我需要一个List<Float>
变成List<Integer>
。唉我不能使用原始类型,我被Float
和Integer
所困,而不是浮点数和整数。
将一个转换为另一个的最佳方式是什么?
修改 对于一些与工作相关的项目,我只使用java一个星期左右,所以在我还没有找到的语言中有很多。当试图施放类似的东西时:
Long projectId = Long.parseLong(myFloat.toString());
我收到了java.lang.NumberFormatExceptions,这些让我陷入困境。特别是当谷歌尝试搜索很长时间时,谷歌几乎没有帮助。
答案 0 :(得分:1)
在我看来(这是一种意见)最好的方式是最简单的方式。
基于以下假设,这是一种偏见:
以下是一个例子
List<Float> floats = ...;
List<Integer> integers = new ArrayList<Integer>();
for (Float item : floats) {
integers.add(item.intValue());
}
return integers;
正如许多人所指出的那样,既然你没有说明什么是重要的,那么很难知道哪种解决方案最能满足你未说出口的要求。
答案 1 :(得分:1)
使用Java 8:
List<Float> list = Arrays.asList(1.0f, 2.0f, 3.0f);
List<Integer> intList = list.stream().map(Float::intValue).collect(Collectors.toList());
答案 2 :(得分:0)
取决于您认为“最佳”的方式:跑得更快?更短的代码?更少的对象创建?
拥有for循环并进行转换可能会运行得最快。只是提示如果您使用ArrayList
,请考虑预先分配您需要的大小。这节省了一些数组大小调整的时间。
如果您正在寻找更短的代码,如果您使用的是Java8,我相信您可以使用类似(未经测试)的内容
List<Long> result = doubleList.stream().map(d->(Long)(double)d).collect(Collector.toList());
我相信在Guava的帮助下你可以在Java8之前做类似的事情,当然代码会更长一些。
如果你想要创建最少的对象,并且如果你知道你将只访问列表中的几个对象,你可以考虑编写一个带有List<Long>
接口的包装器,对于大多数方法调用,委托给内部List<Double>
。
答案 3 :(得分:-2)
我认为没有“最佳方式”。如果您需要准确性,请考虑使用String和BigDecimal,然后将BigDecimal转换为int,double,float或其他任何合适的数值类型。