jdk1.8新特性(四大函数式接口与stream流式计算)(代码片段)

是Cc哈 是Cc哈     2023-01-16     146

关键词:

一、四大函数式接口

概念:只有一个方法的接口

@FunctionalInterface
public interface Runnable 
    public abstract void run();

1.Function接口
源码:

Demo:

package com.chenchen;
import java.util.function.Function;
/**
* Function 函数型接口, 有一个输入参数,有一个输出
* 只要是 函数型接口 可以 用 lambda表达式简化
*/
public class Demo01 
    public static void main(String[] args) 
    //
    // Function<String,String> function = new Function<String,String>() 
    // @Override
    // public String apply(String str) 
    //     return str;
    //     
    // ;
        Function<String,String> function = (str)->return str;;
        System.out.println(function.apply("asd"));
    

2.断定型接口:
有一个输入参数,返回值只能是 布尔值!
源码:

Demo:

package com.chenchen.function;

import java.util.function.Predicate;

/**
 * 断定型接口:有一个输入参数,返回值只能是 布尔值!
 */
public class Demo02 
    public static void main(String[] args) 
    // 判断字符串是否为空
    // Predicate<String> predicate = new Predicate<String>()
     @Override
     public boolean test(String str) 
         return str.isEmpty();
         
     ;
        Predicate<String> predicate = (str) -> 
            return str.isEmpty();
        ;
        System.out.println(predicate.test(""));
    

3.消费型接口
源码:

Demo

package com.chenchen.function;

import java.util.function.Consumer;

/**
 * Consumer 消费型接口: 只有输入,没有返回值
 */
public class Demo03 
    public static void main(String[] args) 
    // Consumer<String> consumer = new Consumer<String>() 
    // @Override
    // public void accept(String str) 
        // System.out.println(str);
        // 
    // ;
        Consumer<String> consumer = (str) -> 
            System.out.println(str);
        ;
        consumer.accept("sdadasd");
    

4.供给型接口
源码:

Demo:

package com.chenchen.function;

import java.util.function.Supplier;

/**
 * Supplier 供给型接口 没有参数,只有返回值
 */
public class Demo04 
    public static void main(String[] args) 
    // Supplier supplier = new Supplier<Integer>() 
    // @Override
    // public Integer get() 
        // System.out.println("get()");
        // return 1024;
         // 
    // ;
        Supplier supplier = () -> 
            return 1024;
        ;
        System.out.println(supplier.get());
    
 

二、Stream流式计算

大数据的本质为存储+计算,集合与数据库的本质都是存储的,而计算的工作可以交给流来操作。

举例:

package com.chenchen.stream;

import java.util.Arrays;
import java.util.List;

/**
 * 题目要求:一分钟内完成此题,只能用一行代码实现!
 * 现在有5个用户!筛选:
 * 1、ID 必须是偶数
 * 2、年龄必须大于23岁
 * 3、用户名转为大写字母
 * 4、用户名字母倒着排序
 * 5、只输出一个用户!
 */
public class Test 
    public static void main(String[] args) 
        User u1 = new User(1, "a", 21);
        User u2 = new User(2, "b", 22);
        User u3 = new User(3, "c", 23);
        User u4 = new User(4, "d", 24);
        User u5 = new User(6, "e", 25);
// 集合就是存储
        List<User> list = Arrays.asList(u1, u2, u3, u4, u5);
// 计算交给Stream流
// lambda表达式、链式编程、函数式接口、Stream流式计算
        list.stream()
                .filter(u -> 
                    return u.getId() % 2 == 0;
                )
                .filter(u -> 
                    return u.getAge() > 23;
                )
                .map(u -> 
                    return u.getName().toUpperCase();
                )
                .sorted((uu1, uu2) -> 
                    return uu2.compareTo(uu1);
                )
                .limit(1)
                .forEach(System.out::println);
    

33jdk1.8新特性(lambda表达式stream流)(代码片段)

目录Lambda表达式自定义接口和Lambda表达式带返回值的情况参数个数只有一个Lambda表达式作为参数传递Lambda表达式注意事项JDK1.8提供的函数式接口ConsumerSupplierPredicateFunction方法引用对象名::实例方法类名::静态方法名类名::实例方法... 查看详情

jdk1.8新特性之--函数式接口

在上一篇文章中我们介绍了JDK1.8的新特性有以下几项。1.Lambda表达式2.方法引用3.函数式接口4.默认方法5.Stream6.Optional类7.Nashormjavascript引擎8.新的日期时间API9.Base64之前学习了前面两项Lambda表达式,方法引用,这一篇学习函数式接... 查看详情

java8新特性:lambda表达式方法和构造器引用streamapi新时间与日期api注解(代码片段)

Java8新特性:Lambda表达式、方法和构造器引用、StreamAPI、新时间与日期API、注解1、Java8新特性1.1、主要的新特性:1.2、编程风格2、Lambda表达式2.1、Lambda基础语法2.2、Lambda表达式需要“函数式接口”的支持2.3、Lambda表达式... 查看详情

jdk1.8新特性——stream(流)的终止操作(查找与匹配的示例演示)(代码片段)

目录一、Stream(流)的理解二、Stream(流)是什么三、Stream(流)的注意事项四、StreamAPI的操作步骤1、创建Stream2、中间操作Stream3、终止Stream4、StreamAPI的操作步骤图解五、Stream(流)的终止操作语... 查看详情

jdk1.8新特性——stream(流)的中间操作(筛选与切片的示例演示)(代码片段)

目录一、Stream(流)的理解二、Stream(流)是什么三、Stream(流)的注意事项四、StreamAPI的操作步骤1、创建Stream2、中间操作Stream3、终止Stream4、StreamAPI的操作步骤图解五、Stream(流)的中间操作语... 查看详情

jdk1.8新特性——stream(流)的中间操作基本语法

目录一、Stream(流)的理解二、Stream(流)是什么三、Stream(流)的注意事项四、StreamAPI的操作步骤1、创建Stream2、中间操作Stream3、终止Stream4、StreamAPI的操作步骤图解五、Stream(流)的中间操作语... 查看详情

jdk1.8新特性——stream(流)的终止操作基本语法

目录一、Stream(流)的理解二、Stream(流)是什么三、Stream(流)的注意事项四、StreamAPI的操作步骤1、创建Stream2、中间操作Stream3、终止Stream4、StreamAPI的操作步骤图解五、Stream(流)的终止操作语... 查看详情

jdk1.8新特性

...StreamAPI等操作,下面胖虎带领大家一探究竟Java8的一些新特性。ava8API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。这种风格将要处理的元素集合看作一种流,流在管道中传输,并且可以在管道的节点上... 查看详情

java8新特性-四大函数式接口(consumersupplierfunctionpredicate)使用样例(代码片段)

文章目录前言一、Consumer:消费型接口二、Supplier:供给型接口三、Function:函数型接口四、Predicate:断言型接口结尾前言函数式接口(FunctionalInterface)是Java8对一类特殊类型的接口的称呼。这类接口只定义了唯一的... 查看详情

jdk1.8新特性——stream(流)的创建(代码片段)

目录一、Stream(流)的理解二、Stream(流)是什么三、Stream(流)的注意事项四、StreamAPI的操作步骤1、创建Stream2、中间操作Stream3、终止Stream4、StreamAPI的操作步骤图解五、Stream(流)创建的四种方... 查看详情

java8新特性(代码片段)

java8新特性1.Lambda表达式1.Lambda表达式和方法引用的案例2.Lmabda表达式的6种形式3.Lambda表达式详细实例2.函数式接口1.函数式接口描述2.java内置四大函数式接口3.方法引用与构造器1.方法引用2.构造器引用4.StreamAPI1.StreamAPI说明2.stream实... 查看详情

jdk1.8新特性之lambda表达式(代码片段)

近期公司的新项目中使用了很多jdk1.8新特性,特来做个小结一.Lambda表达式的使用 lambda表达式也叫函数式编程:Lambda需要函数式接口支持,并且接口中的抽象方法只能有一个函数式接口:接口中只有一个抽象方法的接口,称... 查看详情

jdk1.8新特性——stream(代码片段)

目录生成流遍历流forEach()映射流map()过滤流filter()流的特点流统计count()限制流limit()skip(n)跳过前n个元素limit()+skip()实现分页组合流concat()流排序sorted()Comparator去重distinct()将多个stream合并到一个StreamflatMap()anyMatch()是否匹配任一元... 查看详情

java8都有哪些新特性

jdk1.8的新特性包括如下:一、接口的默认方法与静态方法,也就是接口中可以有实现方法二、Lambda表达式三、函数式接口与静态导入四、Lambda作用域在lambda表达式中访问外层作用域和老版本的匿名对象中的方式很相似。你可以直... 查看详情

010-jdk1.8版本新特性二-optional类,stream流(代码片段)

1.5、Optional类1、定义Optional类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。Optional是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就... 查看详情

009-jdk1.8版本新特性一-展方法,lambda表达式,函数式接口方法引用构造引用(代码片段)

一、JDK1.8名称:Spider(蜘蛛)发布日期:2014-03-18新特性:1.1、扩展方法【接口的默认方法】  Java8允许我们给接口添加一个非抽象的方法实现,只需要使用default关键字即可,这个特征又叫做扩展方法.  在Java中只有单继承,... 查看详情

jdk1.8新特性——主要内容

目录一、jdk1.8新特性的主要内容二、jdk1.8新特性的优点一、jdk1.8新特性的主要内容Lambda表达式函数式接口方法引用与构造器引用StreamAPI接口中的默认方法与静态方法新时间日期API其他新特性二、jdk1.8新特性的优点速度更快代码更... 查看详情

图解jdk1.8新特性(代码片段)

图解jdk1.8新特性(1)函数式接口总结起来就以下几点:如果一个接口要想成为函数接口(函数接口可以直接用lambda方式简化),则必须有且仅有一个抽象的方法(非default和static)可以通过注解@FunctionalInterface注解通过在编译时... 查看详情