在 Java 中,集合是非常重要的數據結構之一。而 Set 和 List 都是其中常用的兩種集合類型。在某些場景,我們可能需要把 Set 轉化為 List。本文將從多個方面進行詳細的闡述,每個方面都將包含 3~5 個自然段。
一、將 Set 轉化為 List 的基本方式
將 Set 轉化為 List,最基本的方式是通過構造函數,將 Set 作為參數傳入 List 中。例如:
Set<Integer> set = new HashSet<>(); List<Integer> list = new ArrayList<>(set);
如此便可將 Set 轉化為 List。此時,List 中的元素順序將是不確定的,並且可能會存在重複元素。因此,若需要對 Set 中元素進行去重或排序,需要進行補充處理。
二、對 Set 進行去重、排序後轉化為 List
在上述基本方式的基礎上,若需要對 Set 中元素進行去重或排序後再轉化為 List,可以使用下列方法。
1. 對 Set 進行去重後轉化
Set<Integer> set = new HashSet<>(); set.add(1); set.add(2); set.add(3); set.add(2); List<Integer> list = new ArrayList<>(new HashSet<>(set)); // list 將為 [1, 2, 3]
通過構造函數 new HashSet(set),將 Set 轉化為 HashSet 並自動去重,再將其傳給 ArrayList 的構造函數,即可得到去重後的 List。
2. 對 Set 進行排序後轉化
Set<Integer> set = new HashSet<>(); set.add(3); set.add(2); set.add(1); List<Integer> list = new ArrayList<>(set); Collections.sort(list); // list 將為 [1, 2, 3]
通過 Collections.sort(list) 進行排序即可獲得排序後的 List。
三、使用 Java 8 Stream 手動轉化 Set 為有序 List
1. 將 Set 轉化為 Stream,使用 sorted 方法進行排序
Set<Integer> set = new HashSet<>(); set.add(3); set.add(2); set.add(1); List<Integer> list = set.stream().sorted().collect(Collectors.toList()); // list 將為 [1, 2, 3]
通過 set.stream().sorted() 進行排序,並通過 collect(Collectors.toList()) 方法將結果轉化為 List。
2. 將 Set 轉化為 Stream,使用 sorted 方法進行降序排序
Set<Integer> set = new HashSet<>(); set.add(3); set.add(2); set.add(1); List<Integer> list = set.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList()); // list 將為 [3, 2, 1]
通過 Comparator.reverseOrder() 實現對降序排序。
四、將 Set 轉化為 List 並進行類型轉換
在實際應用中,我們可能需要將 Set 轉化為 List,並且進行類型轉換。例如:
Set<Object> set = new HashSet<>(); set.add("1"); set.add("2"); List<String> list = set.stream().map(Object::toString).collect(Collectors.toList()); // list 將為 ["1", "2"]
通過 set.stream().map(Object::toString) 將 Object 類型的元素轉化為 String 類型,並使用 Collectors.toList() 將結果轉化為 List。
本文中提到的各種方法和語法都可以根據具體的業務場景進行使用和擴展。以上方案僅供參考。
參考資料:
1. Java Set 轉 List:https://www.baeldung.com/java-convert-set-to-list
2. Java 8 Stream:https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/285367.html