2014-05-13 149 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()); 
相關問題