Java9 集合類擴展of方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
package com.jd.collections; import org.junit.Test; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.stream.IntStream; import java.util.stream.Stream; public class StreamTest { @Test public void testSet() { Set<Integer> integerSet = Set.of( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ); System.out.println(integerSet); } @Test public void testList() { List<Integer> integerSet = List.of( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ); System.out.println(integerSet); } @Test public void testMap() { Map<String, String> stringMap = Map.of( "k1" , "v1" , "k2" , "v2" , "k3" , "v3" ); System.out.println(stringMap); Map.Entry<String, String> entry1 = Map.entry( "k1" , "v1" ); Map.Entry<String, String> entry2 = Map.entry( "k11" , "v11" ); Map.Entry<String, String> entry3 = Map.entry( "k12" , "v12" ); Map<String, String> mapOfEntries = Map.ofEntries(entry1, entry2, entry3); System.out.println(mapOfEntries); } @Test public void testStream1() { Optional<Integer> integerOptional = Stream.ofNullable(Integer.valueOf( "1232" )).findAny(); System.out.println(integerOptional.get()); } @Test public void testStream2() { Stream.of( 1 , 2 , 3 , 4 , 5 , 6 ).dropWhile(x -> x == 6 ) /*.takeWhile(x -> x == 2)*/ .forEach(System.out::println); } @Test public void testStream3() { IntStream.of( 1 , 2 , 3 , 4 , 5 , 6 ).forEach(System.out::println); } @Test public void testStream4() { IntStream.iterate( 1 , i -> i < 10 , i -> i + 2 ).forEach(System.out::println); } // @Test // public void testFlow() { // Flow.Processor // } } |
Java9集合類中重載多個of方法原因
在java9 api的集合類中,有很多看似一樣的重載of方法:
那這里有個問題是為什么有了VarArgs(可變長參數)方法,還需要定義那么多重載的方法呢?查看官方的更新日志中可以發現
有如下描述
http://openjdk.java.net/jeps/269
These will include varargs overloads, so that there is no fixed limit on the collection size. However, the collection instances so created may be tuned for smaller sizes. Special-case APIs (fixed-argument overloads) for up to ten of elements will be provided. While this introduces some clutter in the API, it avoids array allocation, initialization, and garbage collection overhead that is incurred by varargs calls. Significantly, the source code of the call site is the same regardless of whether a fixed-arg or varargs overload is called.
大致得意思是,雖然重載了這么多of方法會造成api的混亂,但它避免了varargs調用引起的數組分配,初始化和垃圾收集開銷。因為固定參數的重載方法,返回的是一個immutable list(不可變集合)。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/dalinsi/article/details/78074470