关于JAVA创建小集合的方法

2018-01-22  本文已影响0人  dogiant

概述

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 的方法使用上有些需要注意的地方,待后续使用中再作说明。

上一篇下一篇

猜你喜欢

热点阅读