2014-05-13 50 views
-2

我正在开发一个Java应用程序,我有两个不同的强类型数组。我需要一个,List<Float>变成了List<Integer>。唉,我不能使用原始类型,我坚持FloatInteger,而不是浮动和整数。转换列表<Float>到列表<Long>

从一个转换另一个的最佳方法是什么?

编辑 我只使用Java进行一个星期左右了一些工作相关的项目,所以有很多,在我还没有找到的语言。当试图施放类似:

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

我是越来越java.lang.NumberFormatExceptions,这些都推动我逼疯了。特别是因为在尝试搜索Long和Long时没有什么帮助。

+0

你觉得是做的最好方法是什么? – Kon

+0

所以你需要在两个列表之间移动,其中一个列表包含不同的数据类型?转换两者之间的数据将是理想的。 (顺便说一下,在这种情况下,包装类与原始类一样好,因为泛型不接受原始类型。) – Makoto

+0

您是试图截断,舍入还是做某种按位保存? – merlin2011

回答

1

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

是基于以下假设一个偏见的意见:

  1. 您还没有成型的代码,因此它可能是一个未知的,如果这部分代码是一个性能瓶颈。这意味着优化它是不成熟的优化。
  2. 如果你这样做的最简单的方法,那么你可能会因“聪明”而招致最少的错误。

示例如下

List<Float> floats = ...; 
List<Integer> integers = new ArrayList<Integer>(); 
for (Float item : floats) { 
    integers.add(item.intValue()); 
} 
return integers; 

而且正如许多人所指出的,因为你没有指定什么是重要的,它是很难知道哪种方案能最好地满足您的需求不言而喻。

+0

谢谢,这正是我所需要的。我不知道可用的.intValue()方法。这使所有的区别。 – ncbl

-2

我不认为有什么“最好的办法”。如果您需要准确性,请考虑使用String和BigDecimal,然后将BigDecimal转换为int,double,float或其他任何适合的数字类型。

+1

这不是一个答案。这甚至不是一个可以理解的评论。 – Kon

+1

@sleepyfung我试图纠正你的英语,而不改变你的答案的含义。如果你认为我已经改变了它的意思,请随意撤消我的编辑。 –

+0

@DavidWallace谢谢大卫,我知道我可怜的英语 – sleepyfung

0

取决于您认为的“最佳”方式:跑得快吗?更短的代码?少创建对象?

拥有for循环并进行转换可能会运行得最快。只是暗示,如果您使用ArrayList,请考虑预先分配您需要的大小。这为您节省了一些数组大小的时间。

,如果你正在寻找更短的代码,如果你正在使用Java8,我相信你可以使用类似(未测试)

List<Long> result = doubleList.stream().map(d->(Long)(double)d).collect(Collector.toList()); 

相信有您可以在预Java8有做类似的事情番石榴的帮助,当然代码会更长一些。

如果你想要创建最小的对象,并且如果你知道你将只访问列表中的几个对象,你可以考虑编写一个包装器,其中包含List<Long>的接口,并且对于大多数方法打电话,委托内部List<Double>

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());