我有一種方法可以測驗 a Listof是否Double包含某些String元素。此串列由 Spring 填充。我不知道如何String在 JUnit 中填充它。
我的方法轉換String為Double以下代碼:
// [...]
Obect element = list.get(i); // list is my List<Double>
if(element.getClass() == String.class) {
list.set(i, Double.parseDouble((String) element));
}
uj5u.com熱心網友回復:
如果你有List<Double>你聲稱的 a,那么就不可能向String它添加 a,所以測驗它是沒有意義的。然而,要求并不總是很有意義。所以,你的代碼幾乎是正確的,但是里面有一個錯誤需要修復(正如你在寫問題時已經知道的那樣)。讓我們看一個更好的代碼:
Obect element = list.get(i); // list is my List<Double>
if(element.getClass().equals(String.class)) {
list.set(i, Double.parseDouble((String) element));
}
您需要使用equals方法而不是==運算子,因為==運算子會檢查運算元是否相同,但是該getClass方法會創建Class該類的新實體,根據定義,該實體與String.class. 該equals方法檢查兩個物件是否相似。如果物件是 ,它們是相似的String。
uj5u.com熱心網友回復:
聽起來這就是你想要的。此條件將字串轉換為 Double 物件或傳遞雙精度。它用于Double.valueOf()避免重新裝箱double。
我也更喜歡簡單地創建一個新串列。在你做的時候插入值會導致相當多的復制(或者如果是linkedList,則計數)。也instanceof按照評論中的建議使用。
List<Object> list = Arrays.asList(
2.3, 4.7, null, "99.3", "47.2", null, 2.8, "48.7");
List<Object> result =
list.stream().map(ob -> (ob instanceof String) ?
Double.valueOf((String)ob) : ob).toList();
System.out.println(result);
印刷
[2.3, 4.7, null, 99.3, 47.2, null, 2.8, 48.7]
如果您只想要一個 Doubles 串列,那么您需要將三元 (?:) 構造中的最后一項轉換為 double(例如(Double)ob)。過濾掉任何空值也可能是可取的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/418878.html
標籤:
上一篇:如何使用<codecvt>轉換std::u16string->std::wstring?
下一篇:將字串截斷至n個字符,忽略空格
