Java从现有数据构造集合

示例

标准馆藏

Java Collections框架

List从单个数据值构造a的一种简单方法是使用java.utils.Arraysmethod Arrays.asList:

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

所有标准集合的实现都提供了构造函数,该构造函数将另一个集合作为参数,在构造时将所有元素添加到新集合中:

List<String> list = new ArrayList<>(data); // 将按原样添加数据
Set<String> set1 = new HashSet<>(data); // 将添加仅保留唯一值的数据
SortedSet<String> set2 = new TreeSet<>(data); // 将添加保持唯一值和排序的数据
Set<String> set3 = new LinkedHashSet<>(data); // 将添加仅保留唯一值的数据 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:

 import org.apache.commons.lang3.ArrayUtils;
 ...
 // 取自org.apache.commons.lang.ArrayUtils#toMap JavaDoc

 // 创建一个Map映射颜色。
 Map colorMap = MapUtils.toMap(new String[][] {{
     {"RED", "#FF0000"},
     {"GREEN", "#00FF00"},
     {"BLUE", "#0000FF"}});

数组的每个元素必须是aMap.Entry或Array,包含至少两个元素,其中第一个元素用作键,第二个元素用作值。

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); // 不变的副本
     Map<K, V> map2 = asMap(keys2, valueFunction); // 实时映射视图
     SortedMap<K, V> map3 = toMap(keys3, valueFunction); // 实时映射视图
 }

Java SE 8

使用Stream,

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

要么

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