首页 > 编程语言 >java 8 函数式编程

java 8 函数式编程

时间:2023-08-13 19:22:04浏览次数:26  
标签:java 函数 stream acd 编程 list item add new

函数式编程

1. Lambda 表达式

1.1 概念

对某些匿名内部类的写法优化,特点是可推导可省略。基本格式:(参数列表) -> {代码}

  • 例如:
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("运行进程");
            }
        }).start();

就可以优化为

new Thread(() -> System.out.println("运行进程")).start();

优化规则可以不记,使用Idea快捷键Alt+Enter可以自动优化写法。

2. Stream 流

2.1 概述

java8的Stream使用的是函数式编程,可以对集合或者数组进行链状流式的操作。

2.2 常用操作

2.2.1 创建流

  • 单列集合:集合对象.stream()。实际开发用的最多
  • 数组对象:Arrays.stream(数组)或者Stream.of(数组)
  • 双列集合:转换成单列集合后在创建流。例如:
        HashMap<String, String> map = new HashMap<>();
        map.put("a","A");
        map.put("b","B");
        map.put("c","C");
        Stream<Map.Entry<String, String>> stream = map.entrySet().stream();

流对象的泛型对象就是集合的泛型对象

2.2.2 中间操作

a. filter

过滤操作,符合条件才能保留在流当中。

        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.stream().filter((item) -> item.startsWith("a")).forEach((item) -> System.out.println(item));// a开头的才能留在流当中

输出结果:

abc
acd

b. map

对流当中的元素计算或者转换。

        List<String> list = new ArrayList<>();
        list.add("abc");
        list.add("bcd");
        list.add("acd");
        list.stream().map(item->item.toCharArray()).forEach(item-> System.out.println(item.length));//String转换成char数组
        list.stream().map(s->s+"**").forEach(s-> System.out.println(s));//每个元素增加**

输出:

3
3
3
abc**
bcd**
acd**

c. distinct

去重:需要流当中的元素重写hashCode和equals方法。

        List<String> list = new ArrayList<>();
        list.add("abc");
        list.add("bcd");
        list.add("acd");
        list.add("acd");
        list.stream().distinct().forEach(s-> System.out.println(s));//输出:abc bcd acd
d. sorted

对流中的元素排序:该方法俩个重载方法可以在sorted中通过入参匿名内部类定义比较 也可以流中的元素本身实现Comparator接口

        List<String> list = new ArrayList<>();
        list.add("abc");
        list.add("bcd");
        list.add("acd");
        list.add("acd");
        list.stream().sorted().forEach(s-> System.out.println(s));

标签:java,函数,stream,acd,编程,list,item,add,new
From: https://www.cnblogs.com/zyaocn/p/17626851.html

相关文章

  • 根号(n)求单个数欧拉函数
    #definelllonglongllola(lln) //求正整数n的欧拉函数(类似常规的素数判定){ llans=n; for(lli=2;i*i<=n;i++) //因为和因子有关,所以只需根号n内 { if(n%i==0) //找到一个因子i { ans=ans*(i-1)/i; //减去因子i相关的数 while(n%i==0)n/=i; //去除所有的因子i......
  • MySQL 的开窗函数
    开窗函数(WindowFunction)提供了行集之间的计算能力,在现代的主流关系型数据库中,基本都提供了相似的功能,这些功能在一些业务开发的过程中很有用,本文将简要介绍这些常用的开窗函数ROW_NUMBER()ROW_NUMBER()函数的使用语法如下:ROW_NUMBER()OVER([partition_definition][order_......
  • 并发编程 --- CAS原子操作
    介绍CAS(CompareAndSwap)是一种无锁算法的实现手段,中文名称为比较并交换。它由CPU的原子指令实现,可以在多线程环境下实现无锁的数据结构。原理CAS的原理是:它会先比较内存中的某个值是否和预期值相同,如果相同则更新这个值,否则不做任何操作。这整个过程是原子的,所以可以在......
  • 无涯教程-Perl - ref函数
    描述如果EXPR为引用,则此函数返回真值;如果未提供EXPR,则为$_。返回的实际值还定义了引用所引用的实体的类型。内置类型为-REFSCALARARRAYHASHCODEGLOBLVALUEIO::Handle如果使用bless()函数为变量设置了祝福,则将返回新的数据类型。新的数据类型通常将是一个类名。语......
  • 如何在C语言中进行图形界面编程
    在C语言中进行图形界面编程是一项非常有挑战性和有趣的任务。虽然C语言主要用于系统级编程和算法开发,但我们仍然可以使用一些库来实现简单的图形界面。在本文中,我将介绍一种在C语言中进行图形界面编程的方法。首先,让我们来了解一下几个常用的图形库,它们可以帮助我们在C语言中创建......
  • C语言编程教程:如何提取手机尾数
    C语言编程教程:如何提取手机尾数在C语言编程中,我们经常需要处理各种数据类型和操作。今天,我们将分享一个有趣且实用的主题:如何提取手机尾数。手机尾数是手机号码中的最后几位数字,提取这些数字可以为我们的程序带来更多可能性。在本文中,我们将介绍一种简洁而有效的方法,帮助你轻松提......
  • java opencv在图片上绘制 矩形
    javaopencv在图片上绘制矩形 packagecom.vfsd.core;importorg.opencv.core.Core;importorg.opencv.core.CvType;importorg.opencv.core.Mat;importorg.opencv.core.Point;importorg.opencv.core.Rect;importorg.opencv.core.Scalar;importorg.opencv.highgu......
  • 用Wpf做一个Block编程画板(仿scratch)
    前言,当时想写这个东西(AIStudio.Wpf.Block)主要是陪我儿子学scratch,觉得这种编程语言挺有意思,但是没有想到自己写一个是如此的复杂,感觉给自己挖坑了,后续的工程也非常巨大,先发出一部分来看看,上几个动图。1.helloworld2.加法3.画线本次更新先发布这些内容,后续进展,敬请期待。......
  • Python文件路径解谜:深入剖析os.path系列函数的精髓
    介绍在Python中,os.path模块提供了一系列用于处理文件路径和文件系统的函数。它是Python标准库中os模块的一部分。本文将深入探讨os.path系列函数的使用方法,从入门到精通。目录导入os.path模块获取文件路径信息os.path.abspath():获取绝对路径os.path.dirname():获取目录......
  • 【C++ Primer读书笔记】7.1.4 构造函数
    构造函数构造函数的任务是初始化类对象的数据成员被调用的时机,无论何时只要类的对象被创建,就会调用构造函数构造函数的特殊性1.构造函数与类名称相同2.构造函数没有返回值3.构造函数不能被声明为const,因为当我们创建一个const对象时,直到构造函数完成初始化过程,对象才......