Java8新特性——其它

帆软FineBI考试题 Flint 补录表,有批次删除功能。在分析主题内添加数据时能够选择批量添加数据。插件安装过程中有报错提示需要下载 Fine I for Excel 运行环境进行修复,修复完毕后重新安装插件。图例显示支持自定义设置,且图例标题支持隐藏显示。finebi中的指标如果想进行维度区间/真的自定义分组,不能直接拖拽到组建区域中需要先转化为维度方可进行指标分组。excel报表不支持分页。 阅读详情

并行流与串行流

并行流就是把一个内容分成多个数据块,并用不同的线程分别处理每个数据块的流。

Java 8 中将并行进行了优化,我们可以很容易的对数据进行并行操作。Stream API 可以声明性地通过 parallel() 与 sequential() 在并行流与顺序流之间进行切换。
了解 Fork/Join 框架

Fork/Join 框架:就是在必要的情况下,将一个大任务,进形拆分(fork)成若干个小任务(拆到不可再拆时),再将一个个的小任务运行的结果进行join汇总。

Fork/Join 框架与传统线程池的区别:

采用“工作窃取”模式(work-stealing):
当执行新的任务时,它可以将其拆分成更小的任务执行,并将小任务加到线程队列中,然后再从一个随机线程的队列中偷一个并把它放在自己的队列中。

相对于一般的线程池实现,fork/join框架的优势体现在对其中包含的任务的处理方式上.在一般的线程池中,如果一个线程正在执行的任务由于某些原因无法继续运行,那么该线程会处于等待状态.而在fork/join框架实现中,如果某个子问题由于等待另外一个子问题的完成而无法继续运行.那么处理该子问题的线程会主动寻找其他尚未运行的子问题来执行.这种方式减少了线程的等待时间,提高了性能。
 

public class ForkJoinCalculate extends RecursiveTask<Long>{

    private static final long serialVersionUID = 1234567890L;//序列号

    private long start;
    private long end;
    private static final long THRESHOLD=10000L;//临界值

    public ForkJoinCalculate(long start,long end) {
        this.start=start;
        this.end=end;
    }
    @Override
    protected Long compute() {
        long length=end-start;
        if(length<=THRESHOLD){
            long sum=0;
            for(long i=start;i<=end;i++){
                sum+=i;
            }
            return sum;
        }else{
            long middle=(start+end)/2;
            ForkJoinCalculate left=new ForkJoinCalculate(start, middle);
            left.fork();

            ForkJoinCalculate right=new ForkJoinCalculate(middle+1, end);
            right.fork();

            return left.join()+right.join();
        }
    }

}
public class TestForkJoin {

    @Test
    public void test1(){
        Instant start=Instant.now();

        ForkJoinPool pool=new ForkJoinPool();
        ForkJoinTask<Long> task=new ForkJoinCalculate(0L, 10000000000L);
        long sum=pool.invoke(task);
        System.out.println(sum);

        Instant end=Instant.now();
        System.out.println("消耗时间"+Duration.between(start, end).toMillis()+"ms");//消耗时间3409ms
    }

    @Test//直接使用java8的并行流
    public void test2(){
        Instant start=Instant.now();

        Long sum=LongStream.rangeClosed(0L, 10000000000L)
                           .parallel()
                           .reduce(0,Long::sum);
        System.out.println(sum);

        Instant end=Instant.now();
        System.out.println("消耗时间"+Duration.between(start, end).toMillis()+"ms");//消耗时间2418ms
    }
}

Optional类

Optional< T>类(java.util.Optional) 是一个容器类,代表一个值存在或不存在。
原来用null表示一个值不存在,现在 Optional可以更好的表达这个概念。并且可以避免空指针异常。

常用方法:

  •     Optional.of(T t) : 创建一个 Optional 实例
  •     Optional.empty() : 创建一个空的 Optional 实例
  •     Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例
  •     isPresent() : 判断是否包含值
  •     orElse(T t) : 如果调用对象包含值,返回该值,否则返回t
  •     orElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回 s 获取的值
  •     map(Function f): 如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty()
  •     flatMap(Function mapper):与 map 类似,要求返回值必须是Optional
    @Test
    public void test5(){
        Man man=new Man();
        String name=getGodnessName(man);
        System.out.println(name);
    }
    //需求:获取一个男人心中女神的名字
    public String getGodnessName(Man man){
        if(man!=null){
            Godness g=man.getGod();
            if(g!=null){
                return g.getName();
            }
        }
        return "苍老师";
    }

    //运用Optional的实体类
    @Test
    public void test6(){
        Optional<Godness> godness=Optional.ofNullable(new Godness("林志玲"));
        Optional<NewMan> op=Optional.ofNullable(new NewMan(godness));
        String name=getGodnessName2(op);
        System.out.println(name);
    }

    public String getGodnessName2(Optional<NewMan> man){
        return man.orElse(new NewMan())
                  .getGodness()
                  .orElse(new Godness("苍老师"))
                  .getName();
    }
//注意:Optional 不能被序列化
public class NewMan {

    private Optional<Godness> godness = Optional.empty();

    private Godness god;

    public Optional<Godness> getGod(){
        return Optional.of(god);
    }

    public NewMan() {
    }

    public NewMan(Optional<Godness> godness) {
        this.godness = godness;
    }

    public Optional<Godness> getGodness() {
        return godness;
    }

    public void setGodness(Optional<Godness> godness) {
        this.godness = godness;
    }

    @Override
    public String toString() {
        return "NewMan [godness=" + godness + "]";
    }

}

接口中的默认方法与静态方法

以前接口类中只允许有全局静态常量和抽象方法

1、Java8中允许接口中包含具有具体实现的方法,该方法称为“默认方法”,默认方法使用 default 关键字修饰。

接口默认方法的“类优先”原则:

若一个接口中定义了一个默认方法,而另一个父类或接口中又定义了一个同名的方法时

    选择父类中的方法。如果一个父类提供了具体的实现,那么接口中具有相同名称和参数的默认方法会被忽略。
    接口冲突。如果一个父接口提供一个默认方法,而另一个接口也提供了一个具有相同名称和参数列表的方法(不管方法是否是默认方法),那么必须覆盖该方法来解决冲突。
 

interface MyFunc{
    default String getName(){
        return "hahaha";
    }
}

interface Named{
    default String getName(){
        return "hehehe";
    }
}

class MyClass implements MyFunc,Named{
    public String getName(){
        return Named.super.getName();
    }
}

2、Java8 中,接口中允许添加静态方法。

public interface Myfunction{

    static void saysome(){
        System.out.println("我是存在接口中的一个静态方法!!");
    }

}

 

重复注解与类型注解

Java8 对注解处理提供了两点改进:可重复的注解及可用于类型的注解。

 

@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})//可以修饰的目标
@Retention(RetentionPolicy.RUNTIME)//生命周期
public @interface MyAnnotations {
    MyAnnotation[] value();
}


@Repeatable(MyAnnotations.class)
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE,TYPE_PARAMETER})//可以修饰的目标
@Retention(RetentionPolicy.RUNTIME)//生命周期
public @interface MyAnnotation {
    String value() default "atguigu";
}


public class TestAnnotation {

    //checker framework框架提供此注解
    private /*@NonNull*/ Object obj=null;

    @Test
    public void test1() throws NoSuchMethodException, SecurityException{
        Class<TestAnnotation> clazz=TestAnnotation.class;
        Method m1=clazz.getMethod("show");
        MyAnnotation[] mas=m1.getAnnotationsByType(MyAnnotation.class);
        for(MyAnnotation myAnnotation:mas){
            System.out.println(myAnnotation.value());
        }
    }

    @MyAnnotation("Hello")
    @MyAnnotation("world")
    public void show(@MyAnnotation("abc")String str){

    }
}

 

AVL-Excite新手必看:5步搞定发动机阀系系统建模(附B站视频教程) 本文为AVL-Excite新手提供发动机阀系系统建模的5步详细指南,涵盖软件环境搭建、基本结构建立、关键参数设置、仿真分析及常见问题排查。通过清晰的步骤说明和实用技巧,帮助工程师快速掌握建模方法,并附有精选B站视频教程链接,便于实践学习。 阅读详情

相关推荐

【AI实战派】从零部署YOLOv8:香橙派AIpro边缘端目标检测全流程解析

本文详细解析了在香橙派AIpro边缘设备上从零部署YOLOv8目标检测模型的全流程。内容涵盖硬件开箱、环境搭建、模型转换(ONNX到昇腾OM格式)以及编写Python推理脚本,并提供了性能优化与实战技巧,帮助开发者高效实现实时边缘AI应用。

weixin_29183637的博客 327

【Java 8 新特性】Java 8 新特性大全

【Java 8 新特性】目录Java Util StreamJava Util FunctionJava Util ConcurrentJava UtilJava TimeJava MathJava Lang Java Util Stream 【Java 8 新特性】Java Stream中forEachOrdered()和forEach() 【Java 8 新特性】如何将Java流(Stream)转化成数组(Array) Java Util Function Java Util Concurrent

猫巳的博客 3033

博途 V16(TIA portal V16)安装教程

本文提供了西门子TIA Portal V16软件的完整安装指南。内容包括百度网盘下载链接(提取码kv69)、详细安装步骤(关闭安全保护、典型安装设置)、授权破解方法,以及PLCSIM仿真功能的使用说明。重点演示了S7-1200 PLC程序的仿真过程,解析了仿真界面各元素功能,包括状态指示灯(RUN/STOP/ERROR)、操作按钮(RUN/STOP/MRES)和网络接口状态等。通过图文并茂的方式,完整呈现了从软件安装到PLC程序仿真的全流程操作。

lingchen1906的博客 6662

【Java】从java8到java17各版本新特性详解

下面这张图是 Oracle 官方给出的 Oracle JDK 支持的时间线,可以看出,JDK 17的支持时间最长,可以延续到2029年9月。考虑到技术更新的速度,这次免费商用8年的时间可谓是经过精心考虑,旨在让用户放心地升级到JDK 17(不过JDK 8的支持时间更长,可以延续到2030年12月)。从JDK诞生到现在,仅有几个版本得到了长期支持,主要包括JDK 7、JDK 8、JDK 11以及即将发布的JDK 17,它将是继Java 8之后最重要的LTS版本,是Java社区八年努力的成果。

一个天蝎座的程序猿 5888

Vue3项目实战:CKEditor5富文本编辑器从安装到隐藏不需要的功能

本文详细介绍了在Vue3项目中集成并深度定制CKEditor5富文本编辑器的完整流程。通过分析其模块化架构,指导开发者从标准构建出发,移除图片、表格等冗余插件,创建专属轻量构建,从而显著减小打包体积并提升用户体验。文章结合实战代码,涵盖了环境搭建、自定义构建配置、高级优化技巧等关键步骤。

weixin_29016833的博客 283

工业相机图像格式深度解析:从Mono8到Mono12的选型与应用

本文深度解析工业相机黑白图像格式,重点对比Mono8、Mono10与Mono12的核心差异。文章从位深、动态范围和数据量等关键概念切入,详细阐述了不同格式的优缺点及适用场景,为工业视觉项目中的相机选型提供实战指南,帮助用户在精度、速度与成本间做出最优决策。

weixin_29207439的博客 260

重学Java 8新特性 | 第1讲——我们为什么要学习Java 8新特性?

为什么我们一定要学习Java 8新特性?

李阿昀的博客 1721

RYU+mininet——RYU

1. 使用RYU做mininet的控制器 1.1 RYU介绍与安装 RYU是一款基于python的控制器,你可用Ryu实现各种想要实现的网络功能,它可以下发或接收流表进行各种路由运算。 建议使用高版本的Ubuntu系统安装ryu,否则会有各种错误,安装过程比较简单,如下: apt install gcc libffi-dev libssl-dev libxml2-dev libxslt1-...

qq_34415266的博客 1万+

jdk8新特性_Java系列之Java 8 新特性必知必会

课程目标:通过本课程的学习,详细掌握Java8新特性之接口默认方法、函数式接口、可重复注解、Optional;适用人群:有Java基础的开发人员; 课程概述:Java 8是一个跨越式的版本,于2014年3月18日正式发布,距今几年过去了,很多企业的项目中都使用了Java8进行开发,很多开源框架也都要求至少JDK8,由于Java8中有很多重要的变化,如果不掌握Java8的这些新特性,可能我们在实际项...

weixin_40009472的博客 85

直升机空气动力学基础--005翼型的升阻比和气动力矩

焦点与翼型有关,总升力矩可以视为附加升力与零升力迎角升力的合成,对于对称翼型,零升力力矩为0,附加升力就是总升力,其焦点就是其压力中心。对于对称翼型,零升力力矩为0,对于非对称翼型,零升力力矩存在,与不对称度成正比。对于不对称翼型,升力对焦点的力矩保持不变。

ygf666的博客 4129

TSP:车为什么能和云端交互?

TSP:车为什么能和云端交互?

天赐好车的博客 409

Java 8新特性总结

Java 8新特性学习总结 1 前言 Java8已经出现了很久了,但是呢,还是有很多人都还在习惯使用以前的来版本JDK,或者是以前老版本的编程方式。通过一段时间对Java8新特性的学习之后,自己也深受感触,原来java8版本写代码可以这么简洁。Java8最主要的就是给我们编程的过程带来了很多便利,不仅仅是代码量少。更多的还是让程序更简洁,减少代码冗余。Java8新特性中有几个比较主要的特性,Lam...

weixin_43288034的博客 383

玩转Docker小游戏项目系列: Docker部署红心纸牌网页小游戏

玩转Docker小游戏项目系列: Docker部署红心纸牌网页小游戏

jks212454的博客 420

java8新特性-排序

java8新特性排序 最近新入手一项目,基本都是java8写法(过滤,排序)感觉很不错,就抽空学习下并总结: 案例一 /** * java排序 * @author andy * */ public class Test2 { public static void main(String[] args) { List<String> strs=new ArrayList&...

最初的节奏 773

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java 8 新特性

Java 8 新特性 Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。 Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等。 新特性 Java8 新增了非常多的特性,我们主要讨论以下几个: 1.Lambda 表达式 Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。它是推动 Java 8 发布的最重要新特性。 2.方法引用 方法引用提

naumy的博客 310

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Java8 新特性

Java8 新特性 前言 Java8已经出现了很久了,但是呢,还是有很多人都还在习惯使用以前的来版本JDK,或者是以前老版本的编程方式。通过一段时间对Java8新特性的学习之后,自己也深受感触,原来java8版本写代码可以这么简洁。Java8最主要的就是给我们编程的过程带来了很多便利,不仅仅是代码量少。更多的还是让程序更简洁,减少代码冗余。Java8新特性中有几个比较主要的特性,Lambda 表达...

weixin_45864733的博客 293

java8新特性

j Java8新特性 1.List集合的forech循环 List<Integer> list = Arrays.asList(1,2,3,4); list.stream().forEach(i -> { System.out.println(i); }); 2.对象 public static void main(String[] args) { //...

qq_40798764的博客 90

Java8的新特性

Java8的新特性一、JDK8中新日期时间API二、Lambda表达式三、强大的Stream API四、Optional类 一、JDK8中新日期时间API JDK8中新日期时间API 二、Lambda表达式 java中的Lambda表达式 三、强大的Stream API java8中的StreamAPI 四、Optional类 两个测试类: public class Girl { private String name; @Override public String

仰望与追逐的博客 472

java8新特性_Java8新特性系列之-Java8 新特性之日期处理详解(一)

课程介绍:课程目标:通过本课程的学习,详细掌握Java8新特性之新的日期处理;适用人群:有Java基础的开发人员; 课程概述:Java 8是一个跨越式的版本,于2014年3月18日正式发布,距今几年过去了,很多企业的项目中都使用了Java8进行开发,很多开源框架也都要求至少JDK8,由于Java8中有很多重要的变化,如果不掌握Java8的这些新特性,可能我们在实际项目的开发中,有可能看不懂别人编...

weixin_39922374的博客 75

Java 8新特性

Java 8新特性 一、 接口内允许添加默认实现的方法 Java 8中允许通过default关键字对接口中定义的抽象方法提供一个默认的实现。 示例代码: // 定义一个公式接口 interface Formula { // 计算 double calculate(int a); // 求平方根 default double sqrt(int a) { ...

qq_39930192的博客 244

java8 新特性_Java8新特性系列之-日期处理详解(二)

课程简介:课程目标:通过本课程的学习,详细掌握Java8新特性之新的日期处理;适用人群:有Java基础的开发人员; 课程概述:Java 8是一个跨越式的版本,于2014年3月18日正式发布,距今几年过去了,很多企业的项目中都使用了Java8进行开发,很多开源框架也都要求至少JDK8,由于Java8中有很多重要的变化,如果不掌握Java8的这些新特性,可能我们在实际项目的开发中,有可能看不懂别人编写...

weixin_39605905的博客 76

java8新特性大全

java8新特性很全 java8新特性很全 Lambda用法实例 Java8-Collect收集Stream的方法 java8StreamAPI

wangsai_blog 675

java进阶一 java8的新特性

前言 前面总结了java基础相关的知识点,包含数据类型、修饰符和string、java三大特性、多线程、IO流,异常等,接下来我们更深一步看看。jdk8发布版已经有一段时间的,里面有些新特性值得去学习一下,我们一起来看看吧。 本篇主要讲述是Java中JDK1.8的一些新语法特性使用,主要是Lambda、Stream和LocalDate日期的一些使用讲解。 Lambda Lambda介绍 ...

月下独舞的博客 407

java8之新特性介绍(java 8 new features)

[color=green][size=medium][b]java8之新特性介绍(java 8 new features)[/b][/size][/color] [size=medium][b]一、可以在接口中写方法体[/b][/size] 在接口中增加新方法时,可以带方法体。 带来的好处: 当新接口发布时,以前实现该接口的类,无需改动。 即:无需实现新添...

iteye_3352的博客 815

java 8 有哪些新特性_java8新特性包括了哪些重要内容

通过java8新特性可以让我们全面了解这种工具所具有的一些特色,因为这种工具对于程序员来说是非常重要的,为程序员提供了很多编程工具和概念,能够以更加快速更重要的方式为用户提供简单便捷,容易维护的方法和解决新的或者现有的一些编程问题。java8新特性也是全面适应当下编程者所需要的一些新需求而产生的,因为这种语言也在不断的进行更新改进,必须要跟进硬件的更新,满足程序员的期待,所以在这种语言发展的过程中...

weixin_35902873的博客 274

java8新特性stream操作

Stream是Java8的一大亮点,是对容器对象功能的增强,它专注于对容器对象进行各种非常便利、高效的 聚合操作(aggregate operation)或者大批量数据操作。Stream API借助于同样新出现的Lambda表达式,极大的提高编程效率和程序可读性。同时,它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用fork/join并行方式来拆分任务和加速处理过程...

qinqinde123的博客 572
上一篇: Java8新特性——Stream API
下一篇: Java8新特性——新时间日期API
夜未眠shm
博客等级 码龄14年 15粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值