Java为了程序员方便使用Lambda表达式,Java内置了四个核心函数式接口

简介: jdk1.8新特性值之lambda表达式的使用。系统的介绍了java中为函数式编程提供的四个核心接口。

Java为了程序员方便使用Lambda表达式,Java内置了四个核心函数式接口

package com.scc.lambda;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

/**
 *  对这四种核心函数式接口的使用
 *  用lambda表达式的时候,有些参数的变量是可以自己随意定义的,但是类型会根据它的实现接口的类型继承下来
 *  例如:Myfunction(String str,Function<String, String> fun) 这个方法
 *  R apply(T t);   这个是function的抽象类  
 *  在实现类中 Myfunction("   hello Alice    ", f->f.trim());
 *  这个f就是随意定义的
 * @author scc
 */
public class Demo4 {
    public static void main(String[] args) {
        System.out.println("---------消费型接口的使用  Consumer--------------");
        happy(20000.0, m->System.out.println("聚餐消费了:"+m+"元"));
        
        System.out.println("--------供给型接口  Supplier--------------");
        List<Integer> randomList = getRandom(9, ()->new Random().nextInt(101));
        System.out.println(randomList);
        
        System.out.println("--------函数型接口   --------------");
        String f1 = Myfunction("   hello Alice    ", f->f.trim());
        System.out.println("去掉字符串两头的空格:"+f1);
        String f2 = Myfunction("HELLO ALICE", f->f.toLowerCase());
        System.out.println("把大写字母转换成小写字母:"+f2);
        
        System.out.println("-------断言型接口   --------------");
        List<String> list=new ArrayList<>();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("张三丰");
        list.add("张会");
        list.add("赵六");
        //找到所有姓张的人 在实现类重写的方法中  定义判断逻辑
        List<String> mydemo = mydemo(list, s->s.startsWith("张"));
        System.out.println(mydemo);
    }
    
    //消费型接口的使用  Consumer   聚餐例子
    public static void happy(Double money,Consumer<Double> com) {
        com.accept(money);
    }
    //供给型接口  Supplier    产生给定个数的随机数  0-100之间
    public static List<Integer> getRandom(int count,Supplier<Integer> sup) {
        List<Integer> list=new ArrayList<>();
        for(int i=0;i<count;i++) {
            list.add(sup.get());
        }
        return list;
    }
    //函数型接口   
    public static String Myfunction(String str,Function<String, String> fun) {
        return fun.apply(str);
    }
    //断言型接口   
    public static List<String> mydemo(List<String> list,Predicate<String> pre){
        List<String> mylist=new ArrayList<>();
        for (String s : list) {
            if(pre.test(s)) {
                mylist.add(s);
            }
        }
        return mylist;
    }
    
}
相关文章
|
2天前
|
安全 Java
在 Java 中使用实现 Runnable 接口的方式创建线程
【10月更文挑战第22天】通过以上内容的介绍,相信你已经对在 Java 中如何使用实现 Runnable 接口的方式创建线程有了更深入的了解。在实际应用中,需要根据具体的需求和场景,合理选择线程创建方式,并注意线程安全、同步、通信等相关问题,以确保程序的正确性和稳定性。
|
5天前
|
自然语言处理 安全 Java
Aviator Java 表达式引擎
AviatorScript 是一门高性能、轻量级寄宿于 JVM 之上的脚本语言。
23 10
|
1天前
|
Java
Java基础(13)抽象类、接口
本文介绍了Java面向对象编程中的抽象类和接口两个核心概念。抽象类不能被实例化,通常用于定义子类的通用方法和属性;接口则是完全抽象的类,允许声明一组方法但不实现它们。文章通过代码示例详细解析了抽象类和接口的定义及实现,并讨论了它们的区别和使用场景。
|
1天前
|
Java 测试技术 API
Java零基础-接口详解
【10月更文挑战第19天】Java零基础教学篇,手把手实践教学!
9 1
|
2天前
|
Java API 数据处理
探索Java中的Lambda表达式与Stream API
【10月更文挑战第22天】 在Java编程中,Lambda表达式和Stream API是两个强大的功能,它们极大地简化了代码的编写和提高了开发效率。本文将深入探讨这两个概念的基本用法、优势以及在实际项目中的应用案例,帮助读者更好地理解和运用这些现代Java特性。
|
6天前
|
Java API
[Java]Lambda表达式
本文主要介绍了Java中的Lambda表达式,包括其优化匿名内部类的方式、使用规范、内置函数式接口及方法引用等内容。文章详细解析了Lambda的基础语法、参数列表、方法体的简化规则,以及如何利用Lambda优化代码。此外,还探讨了Lambda的作用域和引用规则,强调了对局部变量、成员变量和常量的访问限制,旨在帮助读者全面理解和掌握Lambda表达式的应用。
[Java]Lambda表达式
|
4天前
|
监控 安全 Java
在 Java 中使用线程池监控以及动态调整线程池时需要注意什么?
【10月更文挑战第22天】在进行线程池的监控和动态调整时,要综合考虑多方面的因素,谨慎操作,以确保线程池能够高效、稳定地运行,满足业务的需求。
71 38
|
1天前
|
安全 Java
java 中 i++ 到底是否线程安全?
本文通过实例探讨了 `i++` 在多线程环境下的线程安全性问题。首先,使用 100 个线程分别执行 10000 次 `i++` 操作,发现最终结果小于预期的 1000000,证明 `i++` 是线程不安全的。接着,介绍了两种解决方法:使用 `synchronized` 关键字加锁和使用 `AtomicInteger` 类。其中,`AtomicInteger` 通过 `CAS` 操作实现了高效的线程安全。最后,通过分析字节码和源码,解释了 `i++` 为何线程不安全以及 `AtomicInteger` 如何保证线程安全。
java 中 i++ 到底是否线程安全?
|
5天前
|
Java 调度
[Java]线程生命周期与线程通信
本文详细探讨了线程生命周期与线程通信。文章首先分析了线程的五个基本状态及其转换过程,结合JDK1.8版本的特点进行了深入讲解。接着,通过多个实例介绍了线程通信的几种实现方式,包括使用`volatile`关键字、`Object`类的`wait()`和`notify()`方法、`CountDownLatch`、`ReentrantLock`结合`Condition`以及`LockSupport`等工具。全文旨在帮助读者理解线程管理的核心概念和技术细节。
20 1
[Java]线程生命周期与线程通信
|
1天前
|
缓存 Java 调度
Java中的多线程编程:从基础到实践
【10月更文挑战第24天】 本文旨在为读者提供一个关于Java多线程编程的全面指南。我们将从多线程的基本概念开始,逐步深入到Java中实现多线程的方法,包括继承Thread类、实现Runnable接口以及使用Executor框架。此外,我们还将探讨多线程编程中的常见问题和最佳实践,帮助读者在实际项目中更好地应用多线程技术。
9 3