從現有資料構建集合

標準集合

Java Collections 框架

從單個資料值構造 List 的簡單方法是使用 java.utils.Arrays 方法 Arrays.asList

List<String> data = Arrays.asList("ab", "bc", "cd", "ab", "bc", "cd");

所有標準集合實現都提供建構函式,這些建構函式將另一個集合作為引數在構造時將所有元素新增到新集合:

List<String> list = new ArrayList<>(data); // will add data as is
Set<String> set1 = new HashSet<>(data); // will add data keeping only unique values
SortedSet<String> set2 = new TreeSet<>(data); // will add data keeping unique values and sorting
Set<String> set3 = new LinkedHashSet<>(data); // will add data keeping only unique values and preserving the original order

Google Guava Collections 框架

另一個偉大的框架是 Google Guava,它是一個驚人的實用類(提供方便的靜態方法),用於構建不同型別的標準集合 ListsSets

 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 ...
 List<String> list1 = Lists.newArrayList("ab", "bc", "cd");
 List<String> list2 = Lists.newArrayList(data);
 Set<String> set4 = Sets.newHashSet(data);
 SortedSet<String> set5 = Sets.newTreeSet("bc", "cd", "ab", "bc", "cd");

對映集合

Java Collections 框架

類似地,對於地圖,給定一個 Map<String, Object> map,可以使用以下所有元素構建新地圖:

Map<String, Object> map1 = new HashMap<>(map);
SortedMap<String, Object> map2 = new TreeMap<>(map);

Apache Commons Collections 框架

使用 Apache Commons 你可以在 ArrayUtils.toMapMapUtils.toMap 中使用陣列建立 Map:

 import org.apache.commons.lang3.ArrayUtils;
 ...
 // Taken from org.apache.commons.lang.ArrayUtils#toMap JavaDoc

 // Create a Map mapping colors.
 Map colorMap = MapUtils.toMap(new String[][] {{
     {"RED", "#FF0000"},
     {"GREEN", "#00FF00"},
     {"BLUE", "#0000FF"}});

陣列的每個元素必須是 Map.Entry 或包含至少兩個元素的陣列,其中第一個元素用作鍵,第二個元素用作值。

Google Guava Collections 框架

Google Guava 框架的實用程式類命名為 Maps

 import com.google.common.collect.Maps;
 ...
 void howToCreateMapsMethod(Function<? super K,V> valueFunction,
           Iterable<K> keys1, 
           Set<K> keys2, 
           SortedSet<K> keys3) {
     ImmutableMap<K, V> map1 = toMap(keys1, valueFunction); // Immutable copy
     Map<K, V> map2 = asMap(keys2, valueFunction); // Live Map view
     SortedMap<K, V> map3 = toMap(keys3, valueFunction); // Live Map view
 }
Version => Java SE 8

使用 Stream

Stream.of("xyz", "abc").collect(Collectors.toList());

要麼

Arrays.stream("xyz", "abc").collect(Collectors.toList());