從現有資料構建集合
標準集合
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
,它是一個驚人的實用類(提供方便的靜態方法),用於構建不同型別的標準集合 Lists
和 Sets
:
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.toMap
和 MapUtils.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());