Java9中對(duì)集合類擴(kuò)展的of方法解析
Java9 集合類擴(kuò)展of方法
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集合類中重載多個(gè)of方法原因
在java9 api的集合類中,有很多看似一樣的重載of方法:

那這里有個(gè)問題是為什么有了VarArgs(可變長(zhǎng)參數(shù))方法,還需要定義那么多重載的方法呢?查看官方的更新日志中可以發(fā)現(xiàn)
有如下描述
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方法會(huì)造成api的混亂,但它避免了varargs調(diào)用引起的數(shù)組分配,初始化和垃圾收集開銷。因?yàn)楣潭▍?shù)的重載方法,返回的是一個(gè)immutable list(不可變集合)。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SocketIo+SpringMvc實(shí)現(xiàn)文件的上傳下載功能
這篇文章主要介紹了SocketIo+SpringMvc實(shí)現(xiàn)文件的上傳下載功能,socketIo不僅可以用來做聊天工具,也可以實(shí)現(xiàn)局域網(wǎng)。文中給出了實(shí)現(xiàn)代碼,需要的朋友可以參考下2018-08-08
Elasticsearch?percolate?查詢示例詳解
這篇文章主要為大家介紹了Elasticsearch?percolate?查詢示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Java commons-httpclient如果實(shí)現(xiàn)get及post請(qǐng)求
這篇文章主要介紹了Java commons-httpclient如果實(shí)現(xiàn)get及post請(qǐng)求,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
Spring Cloud Hystrix入門和Hystrix命令原理分析
這篇文章主要介紹了Spring Cloud Hystrix入門和Hystrix命令原理分析,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08

