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

作者:英杰王 时间:2022-06-10 09:49:43 

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方法:

Java9中对集合类扩展的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

标签:Java9,集合类,of
0
投稿

猜你喜欢

  • Android 8.0如何完美适配全局dialog悬浮窗弹出

    2023-04-09 12:54:00
  • Java8新特性之精简的JRE详解_动力节点Java学院整理

    2022-09-19 12:25:50
  • SVN报错:Error Updating changes:svn:E155037的解决方案

    2023-06-11 07:27:11
  • Android 自定义ListView实现QQ空间界面(说说内包含图片、视频、点赞、评论、转发功能)

    2022-08-12 20:52:44
  • android从系统图库中取图片的实例代码

    2023-09-13 21:54:44
  • C#委托初级使用的实例代码

    2022-12-01 09:59:44
  • java的io操作(将字符串写入到txt文件中)

    2022-05-28 22:59:23
  • 基于Java的打包jar、war、ear包的作用与区别详解

    2023-11-17 11:41:13
  • C语言实现贪吃蛇小游戏开发

    2022-08-20 00:03:07
  • java ReentrantLock条件锁实现原理示例详解

    2023-12-12 02:36:13
  • 淘宝IP地址库采集器c#代码

    2022-01-15 22:42:33
  • C# TaskScheduler任务调度器的实现

    2022-09-30 16:54:21
  • Android自定义View制作仪表盘界面

    2021-10-05 06:45:01
  • Java实现限定时间CountDownLatch并行场景

    2023-06-05 01:47:27
  • java实现幸运抽奖功能

    2023-11-27 07:24:16
  • springboot如何去除debug日志

    2023-02-14 08:43:37
  • 使用C#编写简单的图形化的可发送附件的邮件客户端程序

    2023-04-24 22:42:04
  • Android Intent传递大量数据出现问题解决

    2021-11-07 10:16:13
  • ssm mybatis如何配置多个mapper目录

    2021-12-06 14:08:25
  • C#实现redis读写的方法

    2023-07-13 16:21:35
  • asp之家 软件编程 m.aspxhome.com