ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

jdk9新特性--卷?

2022-04-28 17:33:49  阅读:187  来源: 互联网

标签:stream -- void List System 特性 jdk9 println out


集合工厂方法 of

package jdk9;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 集合工厂方法
 * 在 Java 9 中为集合的创建增加了静态工厂创建方式,也就是 of 方法,
 * 通过静态工厂 of 方法创建的集合是只读集合,里面的对象不可改变。
 * 并在不能存在 null 值,对于 set 和 map 集合,也不能存在 key 值重复。
 * 这样不仅线程安全,而且消耗的内存也更小
 */
public class Of {
    public static void main(String[] args) {
        List<String> stringList = List.of("a", "b", "c", "d");
        Set<String> stringSet = Set.of("a", "b", "c", "d");
        Map<String, Integer> stringIntegerMap = Map.of("key1", 1, "key2", 2, "key3", 3);
        Map<String, Integer> stringIntegerMap2 = Map.ofEntries(Map.entry("key1", 1), Map.entry("key2", 2));

        System.out.println(stringList);
        System.out.println(stringSet);
        System.out.println(stringIntegerMap);
        System.out.println(stringIntegerMap2);

        /*
         *  通过 of 方法创建的 set 和 map 集合在遍历时,在每个 JVM 周期遍历顺序是随机的
         * [a, b, c, d]
         * [a, d, c, b]
         * {key1=1, key3=3, key2=2}
         * {key2=2, key1=1}
         */

        // 工厂可以自由创建新的实例或者复用现有实例,
        // 使用 of 创建的集合, 避免 == 或者 hashCode 判断操作
        List<String> stringList2 = List.of("a", "b", "c", "d");
        System.out.println(stringList.hashCode()); //3910595
        System.out.println(stringList2.hashCode()); //3910595
    }
}

Stream增强

package jdk9;

import org.junit.Test;

import java.util.List;
import java.util.Optional;
import java.util.stream.IntStream;
import java.util.stream.Stream;

import static java.util.stream.Collectors.toList;

/**
 * 在 Java 9 中,主要增加了 4 个新的操作方法:dropWhile,takeWhile,ofNullable,iterate
 */
public class StreamDemo {

    // 从头开始筛选,遇到不满足的就结束了
    @Test
    public void takeWhile() {
        List<Integer> list1 = List.of(1, 2, 3, 4, 5);
        List<Integer> listResult = list1.stream().takeWhile(x -> x < 3).collect(toList());
        System.out.println(listResult); //[1, 2]
        List<Integer> list2 = List.of(1, 2, 3, 4, 3, 0);
        List<Integer> listResult2 = list2.stream().takeWhile(x -> x < 3).collect(toList());
        System.out.println(listResult2); //[1, 2]
    }

    // 从头开始删除,遇到不满足的就结束了
    @Test
    public void dropWhile() {
        List<Integer> list1 = List.of(1, 2, 3, 4, 5);
        List<Integer> listResult = list1.stream().dropWhile(x -> x < 3).collect(toList());
        System.out.println(listResult);//[3, 4, 5]
        List<Integer> list2 = List.of(1, 2, 3, 4, 3, 0);
        List<Integer> listResult2 = list2.stream().dropWhile(x -> x < 3).collect(toList());
        System.out.println(listResult2);//[3, 4, 3, 0]
    }

    // 创建支持全 null 的 Stream
    @Test
    public void ofNullable() {
        Stream<Integer> stream = Stream.of(1, 2, null);
        stream.forEach(System.out::print);

        // stream = Stream.of(null); // 空指针异常
        stream = Stream.ofNullable(null);
        stream.forEach(System.out::print);
    }

    //可以重载迭代器
    @Test
    public void iterate() {
        IntStream.iterate(0, x -> x < 10, x -> x + 1).forEach(System.out::print);//0123456789
    }

    // Optional 转换成 Stream
    @Test
    public void optional() {
        Stream<Integer> s = Optional.of(1).stream();
        s.forEach(System.out::print);
    }
}

接口私有方法

package jdk9;

/**
 * 接口私有方法
 */
public class Interface {
    public static void main(String[] args) {
        A a = new A();
        a.sleep();
        a.eat();
        a.doXxx();
        /*
         * 躺着睡
         * 喝水
         * 喝水
         */
    }
}

class A implements People{

    @Override
    public void sleep() {
        System.out.println("躺着睡");
    }

}

interface People{
    void sleep();
    default void eat(){
        drink();
    }

    default void doXxx() {
        drink();
    }
    
    // 私有方法
    private void drink(){
        System.out.println("喝水");
    }
}

HTTP/2 客户端,11有新变化

标签:stream,--,void,List,System,特性,jdk9,println,out
来源: https://www.cnblogs.com/fly-book/p/16203712.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有