Java9中对集合类扩展的of方法解析

 更新时间:2021年09月02日 15:01:21   作者:英杰王  
这篇文章主要介绍了Java9 中对集合类扩展的of方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Java9 集合类扩展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集合类中重载多个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(不可变集合)。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java开发神器Lombok安装与使用详解

    Java开发神器Lombok安装与使用详解

    Lombok的安装分两部分:Idea插件的安装和maven中pom文件的导入,本文重点给大家介绍Java开发神器Lombok安装与使用详解,感兴趣的朋友跟随小编一起看看吧
    2022-02-02
  • SocketIo+SpringMvc实现文件的上传下载功能

    SocketIo+SpringMvc实现文件的上传下载功能

    这篇文章主要介绍了SocketIo+SpringMvc实现文件的上传下载功能,socketIo不仅可以用来做聊天工具,也可以实现局域网。文中给出了实现代码,需要的朋友可以参考下
    2018-08-08
  • Elasticsearch percolate 查询示例详解

    Elasticsearch percolate 查询示例详解

    这篇文章主要为大家介绍了Elasticsearch percolate 查询示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Java接口和抽象类有什么区别

    Java接口和抽象类有什么区别

    这篇文章主要介绍了Java接口和抽象类有什么区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • Java中map和flatMap的区别举例详解

    Java中map和flatMap的区别举例详解

    这篇文章主要给大家介绍了关于Java中map和flatMap区别的相关资料,在Java中Stream接口有map()和flatmap()方法,两者都有中间流操作,并返回另一个流作为方法输出,需要的朋友可以参考下
    2023-10-10
  • 基于FileNotFoundException问题的解决

    基于FileNotFoundException问题的解决

    这篇文章主要介绍了基于FileNotFoundException问题的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Java commons-httpclient如果实现get及post请求

    Java commons-httpclient如果实现get及post请求

    这篇文章主要介绍了Java commons-httpclient如果实现get及post请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Spring Cloud Hystrix入门和Hystrix命令原理分析

    Spring Cloud Hystrix入门和Hystrix命令原理分析

    这篇文章主要介绍了Spring Cloud Hystrix入门和Hystrix命令原理分析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • springboot war包部署过程详解

    springboot war包部署过程详解

    这篇文章主要为大家介绍了springboot war包部署过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Spring MVC参数传递中文乱码解决方法分享

    Spring MVC参数传递中文乱码解决方法分享

    这篇文章主要介绍了Spring MVC参数传递中文乱码解决方法分享,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12

最新评论