将List <float>转换为List <long> </long> </float>

时间:2014-05-13 02:45:20

标签: java list arraylist

我正在开发一个Java应用程序,我有两个不同的强类型数组。我需要一个List<Float>变成List<Integer>。唉我不能使用原始类型,我被FloatInteger所困,而不是浮点数和整数。

将一个转换为另一个的最佳方式是什么?

修改 对于一些与工作相关的项目,我只使用java一个星期左右,所以在我还没有找到的语言中有很多。当试图施放类似的东西时:

Long projectId = Long.parseLong(myFloat.toString()); 

我收到了java.lang.NumberFormatExceptions,这些让我陷入困境。特别是当谷歌尝试搜索很长时间时,谷歌几乎没有帮助。

4 个答案:

答案 0 :(得分:1)

在我看来(这是一种意见)最好的方式是最简单的方式。

基于以下假设,这是一种偏见:

  1. 您尚未对代码进行分析,因此如果此部分代码是性能瓶颈,则可能未知。这意味着优化它是不成熟的优化。
  2. 如果你以最简单的方式做到这一点,那么由于“聪明”,你可能会招致最少的错误。
  3. 以下是一个例子

     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或其他任何合适的数值类型。