將整數列表轉換為字符串列表
一、概述
從版本 5 開始,Java 就支持泛型。 Java 泛型給我們帶來的一個好處就是類型安全。例如,當我們將List
對象myList
聲明為List<Integer>
時,我們不能將類型不是Integer
的元素放入myList
。
但是,當我們使用泛型集合時,我們通常希望將Collection<TypeA>
轉換為Collection<TypeB>
。
在本教程中,我們將以List<Integer>
為例,探討如何將List<Integer>
轉換為List<String>
。
2. 準備一個List<Integer>
對像作為例子
為簡單起見,我們將使用單元測試斷言來驗證我們的轉換是否按預期工作。因此,讓我們首先初始化一個整數列表:
List<Integer> INTEGER_LIST = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
如上面的代碼所示,我們在INTEGER_LIST
對像中有七個整數。現在,我們的目標是將INTEGER_LIST
中的每個整數元素轉換為**String** ,
例如, 1
到“1”
, 2
到“2”
,等等。最後,結果應該等於:
List<String> EXPECTED_LIST = Arrays.asList("1", "2", "3", "4", "5", "6", "7");
在本教程中,我們將介紹三種不同的方法:
- 使用 Java 8 的 Stream API
- 使用 Java
for
循環 - 使用番石榴庫
接下來,讓我們看看它們的實際效果。
3. 使用 Java 8 Stream
的map()
方法
Java Stream API 在 Java 8 及更高版本上可用。它提供了許多方便的接口,使我們可以輕鬆地將Collection
作為流來處理。
例如,將List<TypeA>
轉換為List<TypeB>
的一種典型方法是Stream
的map()
方法:
theList.stream().map( .. the conversion logic.. ).collect(Collectors.toList());
那麼接下來,讓我們看看如何使用map()
方法將List<Integer>
轉換為List<String>
:
List<String> result = INTEGER_LIST.stream().map(i -> i.toString()).collect(Collectors.toList());
assertEquals(EXPECTED_LIST, result);
如上面的代碼示例所示,我們將 lambda 表達式傳遞給map()
,調用每個元素 ( Integer
) 的toString()
方法將其轉換為String
。
如果我們運行它,測試就會通過。因此, Stream
的map()
方法完成了這項工作。
4. 使用for
循環
我們已經看到Stream
的map()
方法可以解決這個問題。但是,正如我們所提到的,Stream API 僅在 Java 8 及更高版本中可用。因此,如果我們使用的是較舊的 Java 版本,則需要以另一種方式解決問題。
例如,我們可以通過一個簡單for
循環來進行轉換:
List<String> result = new ArrayList<>();
for (Integer i : INTEGER_LIST) {
result.add(i.toString());
}
assertEquals(EXPECTED_LIST, result);
上面的代碼表明我們首先創建了一個新的List<String>
對象result
。然後,我們在for
循環中迭代List<Integer>
列表中的元素,將每個Integer
元素轉換為String,
並將字符串添加到result
列表。
如果我們試一試,測試就會通過。
5. 使用 Guava 庫
當我們使用集合時,轉換集合的類型是一個非常標準的操作,一些流行的外部庫提供了實用方法來進行轉換。
在本節中,我們將使用 Guava 來展示如何解決我們的問題。
首先,讓我們在pom.xml
中添加 Guava 庫依賴項:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.1-jre</version>
</dependency>
當然,我們可以去Maven Central倉庫查看最新版本。
接下來,我們可以使用 Guava 的Lists.transform()
方法來解決我們的問題:
List<String> result = Lists.transform(INTEGER_LIST, Functions.toStringFunction());
assertEquals(EXPECTED_LIST, result);
transform()
方法對INTEGER_LIST
中的每個元素應用toStringFunction()
並返迴轉換後的列表。
如果我們運行它,測試就會通過。
六,結論
在這篇簡短的文章中,我們學習了三種將List<Integer>
轉換為List<String>
的方法。如果我們的 Java 版本是 8+,Stream API 將是最直接的轉換方式。否則,我們可以通過循環應用轉換或轉向外部庫,例如 Guava。