將字符串列表轉換為整數列表
一、概述
Java 泛型給我們帶來了很多好處。類型安全是重要的。例如,我們不能將Integer
添加到List<String>.
因此,當我們使用泛型集合時,我們經常希望將Collection<TypeA>
轉換為Collection<TypeB>
。
在本快速教程中,我們將探索將List<String>
轉換為List<Integer>
。
2.準備一個List<String>
實例作為輸入實例
首先,我們先初始化一個字符串列表作為輸入:
List<String> STRING_LIST = Arrays.asList("1", "2", "3", "4", "5", "6", "7")
如我們所見,列表對象帶有七個字符串。我們希望將**STRING_LIST
中的每個字符串元素轉換為Integer
** ,
例如,“ 1″
到1
,“ 2″
到2
,等等。結果,我們將得到一個List<Integer>
等於:
List<Integer> EXPECTED_LIST = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
在本教程中,我們將介紹三種不同的方法:
- 使用 Java 8 的 Stream API
- 使用 Java
for
循環 - 使用番石榴庫
為簡單起見,我們將使用單元測試斷言來驗證我們的轉換是否按預期工作。
接下來,讓我們深入探討。
3. 使用 Stream API 中的map()
方法
Java Stream API 提供了許多方便的接口,讓我們可以輕鬆地將Collection
作為流來處理。它在 Java 8 及更高版本上可用。如今,當我們處理一個新的 Java 項目時,它可能會使用 Java 8 或更高版本。因此,我們將首先查看 Stream API 方法。
API 的便捷方法之一是map()
。我們可以使用map()
方法簡單地將List<TypeA>
轉換為List<TypeB>
:
someList.stream().map( .. the conversion logic.. ).collect(Collectors.toList());
上面的“ .. the conversion logic ..
”可以是方法引用或lambda表達式。
那麼接下來,讓我們看看如何使用map()
方法將List<String>
轉換為List<Integer>
:
List<Integer> result = STRING_LIST.stream()
.map(Integer::valueOf)
.collect(Collectors.toList());
assertEquals(EXPECTED_LIST, result);
在上面的代碼示例中,我們將方法引用“ Integer::valueOf
”傳遞給map()
。有多種方法可以將String
轉換為Integer
。在這裡,為簡單起見,我們在每個字符串元素上調用Integer.valueOf()
。
如果我們運行它,測試就會通過。所以, Stream
的map()
方法解決了這個問題。
4. 使用for
循環
我們已經看到Stream
的map()
方法可以解決這個問題。但是,正如我們所提到的,Stream API 僅在 Java 8 及更高版本中可用。因此,如果我們使用的是較舊的 Java 版本,則無法使用 Stream API。因此,我們需要以不同的方式解決問題。
接下來,讓我們通過一個簡單的for
循環來進行轉換:
List<Integer> result = new ArrayList<>(STRING_LIST.size());
for (String s : STRING_LIST) {
result.add(Integer.valueOf(s));
}
assertEquals(EXPECTED_LIST, result);
上面的代碼表明我們首先創建了一個新的List<Integer>
對象result
。然後,我們在for
循環中迭代List<String>
列表中的元素,將每個String
元素轉換為Integer,
並將整數添加到result
列表中。
如果我們試一試,測試就會通過。
5. 使用 Guava 庫
由於我們在使用集合時經常需要轉換集合的類型,因此一些流行的外部庫提供了實用方法來進行轉換。
在本節中,我們將使用 Guava 來展示如何解決我們的問題。
首先,讓我們在pom.xml
中添加 Guava 庫依賴項:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>32.0.1-jre</version>
</dependency>
當然,我們可以去Maven Central倉庫查看最新版本。
接下來,讓我們使用 Guava 的Lists.transform()
方法來解決我們的問題。顧名思義, transform()
方法可以使用提供的“轉換函數”將集合轉換為不同的類型:
List<Integer> result = Lists.transform(STRING_LIST, new Function<String, Integer>() {
@Override
public Integer apply(String input) {
return Integer.valueOf(input);
}
});
assertEquals(EXPECTED_LIST, result);
如我們所見,我們傳遞了一個匿名Function
對像作為“轉換函數”。它指示transform()
方法如何應用轉換。同樣,我們調用Integer.valueOf()
將每個String
轉換為Integer
。
如果我們運行它,測試就會通過。
六,結論
在這篇簡短的文章中,我們學習了三種將List<String>
轉換為List<Integer>
的方法。如果我們使用 Java 8 或更高版本,Stream API 將是最直接的轉換方法。否則,我們可以通過循環應用轉換或轉向外部庫,例如 Guava。
與往常一樣,此處提供的所有代碼片段都可以在 GitHub 上找到。