概述
java开发中我们会经常需要构造一些个小集合(List,Set,Map)用于mock测试假数据返回等,本文将介绍几种集合的初始化方法。
通常一种较为常见的方法是这样的
@Test
public void test() {
Set<Integer> numbers = new HashSet<Integer>();
numbers.add(111);
numbers.add(222);
numbers.add(3333);
assertTrue(numbers.contains(111));
}
java因此也被经常被诟病其冗长繁琐,不够简洁。创建一个小小的集合,先要new一下,再调用好几次add。
当然对于一个List来说有一个方法还算简洁
List<Integer> list = Arrays.asList(1, 2, 3);
另有一种不常见的方法是使用动态初始化块 { }
Set<String> set = new HashSet<String>() {{
add("a"); add("b"); add("c");
}};
JAVA 8中可以使用Stream来创建
Set<String> set = Stream.of("foo", "bar", "baz").collect(toSet());
List<String> list = Stream.of("foo", "bar", "baz").collect(toList());
纵观上面的这些方法,似乎都不太尽人意,JAVA8的版本,虽然是一行代码,但也它仍然不够直观,还涉及创建了些不必要创建的对象,另外这种方法并不能用于创建一个Map。
JAVA 9将给我们提供静态方法
List、Set和Map接口提供了静态方法,这些接口将以元素作为参数,并分别返回List、Set和Map的实例
List 和 Set 方法基本一样
static <E> List<E> of(E e1, E e2, E e3)
static <E> Set<E> of(E e1, E e2, E e3)
用例:
List<String> list = List.of("foo", "bar", "baz");
Set<String> set = Set.of("foo", "bar", "baz");
还可以这样
int[] arr = { 1, 2, 3, 4, 5 };
List<int[]> list = List.of(arr);
Map的方法和用例
方法:
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3)
用例1:
Map<String, String> map = Map.of("foo", "a", "bar", "b", "baz", "c");
方法:
static <K,V> Map<K,V> ofEntries(Map.Entry<? extends K,? extends V>... entries)
用例2:
Map<String, String> map = Map.ofEntries(
new AbstractMap.SimpleEntry<>("foo", "a"),
new AbstractMap.SimpleEntry<>("bar", "b"),
new AbstractMap.SimpleEntry<>("baz", "c"));
结语
本文讲解了有关初始化创建小集合的常用方法,以及JAVA9的API演变。其中JAVA9 的方法使用上有些需要注意的地方,待后续使用中再作说明。
网友评论