Java8-03-Lambda表达式和stream

【java学习】java8新特性:stream、Lambda函数、接口的默认方法和类方法、函数式接口、Optional、DateTime 1,概念java.util.stream是java8新特性。 java.util.stream与java.io包里的 InputStream 和 OutputStream 是完全不同的概念。 Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bul............ 阅读详情

1-先说函数式接口

1.8开始新定义了一个注解FunctionalInterface(翻译过来就是:函数式接口)

* Conceptually, a functional interface has exactly one abstract method.(摘自jdk源码说明)

接口有且仅有一个抽象的方法,可以加上注解FunctionalInterface,比如我们经常使用的Runnable接口;

接口现在还可以拥有默认方法(即在类没有对方法进行实现时,其主体为方法提供默认实现的方法)。

哪怕有很多默认方法,只要接口只定义了一个抽象方法,它就仍然是一个函数式接口。

当然我们也可以自己定义函数式接口;只需要写一个接口,接口里面一个抽象方法(接口的方法默认都是抽象的),就可以在接口上加上@FunctionalInterface,标记为函数式接口...

2-Lambda表达式的语法

Lambda的基本语法是

(parameters) -> expression

或(请注意语句的花括号)

(parameters) -> { statements; }

Lambda表达式在Java语言中引入了 “->” 操作符, “->” 操作符被称为Lambda表达式的操作符或者箭头操作符,它将Lambda表达式分为两部分:

  • 左侧部分指定了Lambda表达式需要的所有参数。

Lambda表达式本质上是对接口的实现,Lambda表达式的参数列表本质上对应着接口中方法的参数列表。

  • 右侧部分指定了Lambda体,即Lambda表达式要执行的功能。

Lambda体本质上就是接口方法具体实现的功能。

Lambda只需要一个参数时,参数的小括号可以省略;

当Lambda体只有一条语句时,return和大括号可以省略;

Lambda表达式的参数列表的数据类型可以省略不写,因为JVM编译器能够通过上下文推断出数据类型,这就是“类型推断”。

3-Java8核心的函数式接口

3.1-Consumer消费型接口

Consumer接口是消费性接口,接受一个参数,无返回值。

   public static void testConsumer() {
        testConsumerChild("abc", x-> System.out.println(x));
    }

    public static void  testConsumerChild(String str,Consumer<String> consumer){
        consumer.accept(str);
    };

3.2-Supplier供给型接口

Supplier接口是供给型接口,有返回值

public static void testSupplier() {
        List<String> list = testSupplierChild(3, () -> UUID.randomUUID().toString().replace("-", ""));
//遍历集合
        list.stream().forEach(System.out::println);
    }

    
public static List<String> testSupplierChild(int num, Supplier<String> supplier){
        List<String> list = new ArrayList<>();
        for(int i = 0; i < num; i++){
            list.add(supplier.get());
        }
        return list;
}

3.3-Function<T, R>函数式接口

Function接口是函数型接口,一个入参,一个出参,有返回值

   public static void testFunction() {
        Integer function = testFunctionChild("abc", aaa -> aaa.length());
        System.out.println(function);
    }
    public static Integer testFunctionChild(String str, Function<String, Integer> function) {
        return function.apply(str);
    }

3.4-Predicate断言型接口

Predicate接口是断言型接口,接受一个参数,返回值类型为boolean

   public static void testPredicate() {
        List<String> list = Arrays.asList("abc", "abcdef", "abcdjkl", "ycmy", "abcdjklmn");
        List<String> strList = testPredicateChild(list, s -> s.length() >= 5);
        strList.stream().forEach(System.out::println);
    }

    public static List<String> testPredicateChild(List<String> list, Predicate<String> predicate) {
        List<String> strList = new ArrayList<>();
        list.stream().forEach(aaa->{
            if(predicate.test(aaa)){
                strList.add(aaa);
            }
        });
        return strList;
    }

将 List 类型抽象化

public static <T> List<T> filter(List<T> list, Predicate<T> p){
    List<T> result = new ArrayList<>();
    for(T e: list){
        if(p.test(e)){
            result.add(e);
        }
    }
    return result;
}

4-方法引用与构造器引用

4.1-方法引用

当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用!这里需要注意的是:实现抽象方法的参数列表,必须与方法引用方法的参数列表保持一致!

如果一个Lambda代表的只是“直接调用这个方法”,那最好还是用名称来调用它,而不是去描述如何调用它。

方法引用就是操作符“::”将方法名和对象或类的名字分隔开来。

对象::实例方法

类::静态方法

类::实例方法

比如:

(x) -> System.out.println(x); 等价于:System.out::println

(str, i) -> str.substring(i) 等价于: String::substring

() -> Thread.currentThread().dumpStack() 等价于: Thread.currentThread()::dumpStack

4.2-构造器引用

与函数式接口相结合,自动与函数式接口中方法兼容。可以把构造器引用赋值给定义的方法,与构造器参数列表要与接口中抽象方法的参数列表一致!

ClassName::new

Supplier<Apple> c1 = Apple::new;等价于Supplier<Apple> c1 = () -> new Apple();

Function<Integer, Apple> c2 = Apple::new;

等价于

Function<Integer, Apple> c2 = (weight) -> new Apple(weight);

5-Stream

Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。

注意: Stream 自己不会存储元素。 Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。

创建流(数据源) ---->中间操作 ---->终止操作(终端操作)

5.1-中间操作之筛选与切片

filter,distinct,limit,skip操作

   private static void test001() {
        List<Integer> numbers = Arrays.asList(1, 2, 1, 3, 3, 2, 4);
        numbers.stream()
                .filter(i -> i % 2 == 0)  //获取偶数
                .distinct()  //去重复
                .forEach(System.out::println); //遍历
    }

流支持limit(n)方法,该方法会返回一个不超过给定长度的流。所需的长度作为参数传递给limit。

流还支持skip(n)方法,返回一个扔掉了前n个元素的流。如果流中元素不足n个,则返回一个空流。请注意, limit(n)和skip(n)是互补的!

private static void test002() {
        List<Integer> numbers = Arrays.asList(1, 2, 1, 3, 3, 2, 4,6,8,10);
        numbers.stream()
                .filter(i -> i % 2 == 0)  //获取偶数  2-2-4-6-8-10
                .distinct()  //去重复 2-4-6-8-10
                .skip(2) //6-8-10
                .limit(2) //6-8
                .forEach(System.out::println); //遍历  6-8
    }

5.2-映射map和flatMap

   private static void test003() {
        List<String> words = Arrays.asList("Java8", "Lambdas", "In", "Action");
         words.stream()
                .map(String::length)
                .collect(Collectors.toList())
                .forEach(System.out::println);
    }

如果你要找出每道菜的名称有多长,怎么做?你可以像下面这样,再链接上一个map:

需求:

对于一张单词 表 , 如 何 返 回 一 张 列 表 , 列 出 里 面 各 不 相 同 的 字 符 呢 ? 例 如 , 给 定 单 词 列 表["Hello","World"],你想要返回列表["H","e","l", "o","W","r","d"]。

  private static void test005() {
        String[] arrayOfWords = {"Hello", "World"};
        Stream<String> words = Arrays.stream(arrayOfWords);
        words.map(word -> word.split(""))
                .flatMap(Arrays::stream)
                .distinct()
                .collect(Collectors.toList())
                .forEach(System.out::println);
    }

使用flatMap方法的效果是,各个数组并不是分别映射成一个流,而是映射成流的内容。

给定两个数字列表,如何返回所有的数对呢?例如,给定列表[1, 2, 3]和列表[3, 4],应该返回[(1, 3), (1, 4), (2, 3), (2, 4), (3, 3), (3, 4)]。为简单起见,你可以用有两个元素的数组来代表数对。

  private static void test006() {
        List<Integer> numbers1 = Arrays.asList(1, 2, 3);
        List<Integer> numbers2 = Arrays.asList(3, 4);
        List<int[]> pairs = numbers1.stream()
                        .flatMap(i -> numbers2.stream()
                                .map(j -> new int[]{i, j})
                        )
                        .collect(Collectors.toList());
        pairs.forEach( abc ->{
            System.out.println(Arrays.toString(abc));
        });
    }

如何扩展前一个例子,只返回总和能被3整除的数对呢?例如(2, 4)和(3, 3)是可以的

   private static void test007() {
        List<Integer> numbers1 = Arrays.asList(1, 2, 3);
        List<Integer> numbers2 = Arrays.asList(3, 4);
        List<int[]> pairs = numbers1.stream()
                .flatMap(i -> numbers2.stream().filter(j ->(i+j) %3==0)
                        .map(j -> new int[]{i, j})
                )
                .collect(Collectors.toList());
        pairs.forEach( abc ->{
            System.out.println(Arrays.toString(abc));
        });
    }

5.3-查找和匹配

Stream API通过allMatch、 anyMatch、 noneMatch、 findFirst和findAny方法提供了这样的工具。

通过单词就知道对应的含义,demo省略...

   private static void test008() {
        List<String> words = Arrays.asList("Java8", "Lambdas", "In", "Action");
        Optional<String> optional = words.stream()
                .filter(abc -> abc.length() > 30)
                .findAny();
//        System.out.println(optional.orElse("580"));//返回580
        System.out.println(optional.isPresent()?optional.get():"590");
    }

5.4-归约

Stream API通过reduce方法提供了这样的工具。

    private static void test009() {
        List<Integer> nums1 = Arrays.asList(1, 2, 3, 4);
        Integer reduce1 = nums1.stream().reduce(0, (a, b) -> a + b);
        System.out.println(reduce1);

        List<Integer> nums2 = Arrays.asList(1, 2, 3, 4);
        Integer reduce2 = nums2.stream().reduce(1, (a, b) -> a*b);
        System.out.println(reduce2);

        List<Integer> nums3 = Arrays.asList(1, 2, 3, 4,5,8,12,6,9,7);
        Optional<Integer> reduce3 = nums3.stream().reduce(Integer::max);
        System.out.println(reduce3.orElse(-1));

        Optional<Integer> reduce4 = nums3.stream().reduce(Integer::min);
        System.out.println(reduce4.orElse(-1));
    }

5.5-操作小结

5.6-其他

Collectors.summingInt;

Collectors.averagingInt

//平均值

double avgCalories =menu.stream().collect(Collectors.averagingInt(Dish::getCalories));

IntSummaryStatistics menuStatistics =menu.stream().collect(Collectors.summarizingInt(Dish::getCalories));

这个收集器会把所有这些信息收集到一个叫作IntSummaryStatistics的类里,它提供了方便的取值( getter)方法来访问结果。打印menuStatisticobject会得到以下输出:IntSummaryStatistics{count=9, sum=4300, min=120,average=477.777778, max=800}

同样,相应的summarizingLong和summarizingDouble工厂方法有相关的LongSummaryStatistics和DoubleSummaryStatistics类 型 , 适 用 于 收 集 的 属 性 是 原 始 类 型long或double的情况

groupingBy-分组

Map<Dish.Type, List<Dish>> dishesByType =menu.stream().collect(groupingBy(Dish::getType));

partitioningBy-分区

Map<Boolean, List<Dish>> partitionedMenu =

menu.stream().collect(partitioningBy(Dish::isVegetarian));

Java8特性Stream流对List列表实现查询、统计、排序、分组 注意:findFirst() 和 findAny() 都是获取列表中的第一条数据,但是findAny()操作,返回的元素是不确定的,对于同一个列表多次调用findAny()有可能会返回不同的值。如果流中的元素的类实现了 Comparable 接口,即有自己的排序规则,那么可以直接调用 sorted() 方法对元素进行排序,如 Stream。使用 reduce((T, T) -> T) 和 reduce(T, (T, T) -> T) 用于组合流中的元素,如求和,求积,求最大值等。 阅读详情

相关推荐

BitLocker加密盘解密实战:从隐藏分区到密钥恢复的全过程

本文深入探讨了BitLocker加密盘在密钥丢失或遗忘情况下的解密实战方法。文章系统性地介绍了从理解加密机制、制作取证镜像,到深度扫描隐藏分区、分析内存转储寻找密钥残留,最终利用恢复密钥解锁加密卷的全过程。重点剖析了非标准恢复路径,为数据恢复和数字取证工作提供了专业的技术框架和实战思路。

weixin_29268385的博客 336

java stream lambda_JAVA基础知识|lambda与stream

lambda与stream是java8中比较重要两个新特性,lambda表达式采用一种简洁的语法定义代码块,允许我们将行为传递到函数中。之前我们想将行为传递到函数中,仅有的选择是使用匿名内部类,现在我们可以使用lambda表达式替代匿名内部类。在学习lambda表达式之前,建议各位看官先去学习一下匿名内部类(JAVA基础知识|内部类)。stream提供了很多有用的api,方便了我们对集合的操作一、...

weixin_39736650的博客 652

华三(H3C)网络设备配置命令大全与学习指南

本文全面介绍 H3C 网络设备的配置命令,涵盖路由器、交换机、ACL、NAT、VTY、SSH、本地用户、日志、STP、防火墙、QoS 等模块,适合网络工程初学者与运维人员参考。

DreamCollector的博客 6568

Java中Stream配合Lambda使用详解

Java 8 是一个非常成功的版本,这个版本新增的Stream,配合同版本出现的Lambda ,给我们操作集合(Collection)提供了极大的便利。Stream流是JDK8新增的成员,允许以声明性方式处理数据集合,可以把Stream流看作是遍历数据集合的一个高级迭代器。Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找/筛选/过滤、排序、聚合和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询

qq_25775675的博客 2734

STM32CUBEMX 使用教程5 — DMA配置 & 串口结合DMA实现数据搬运

DMA(Direct Memory Access),直接存储器访问(或数据搬运),是STM32中很实用的一个外设。DMA 传输数据方式不需要 CPU 参与控制传输,也不用中断处理的方式进行数据搬运处理,纯粹通过硬件为 RAM 与 I/O 设备之间开辟一条直接传送数据的通路,使 CPU 的效率大大提高。

weixin_43866583的博客 1500

ABB RobotWare数据包全版本归档与高效获取指南

记得去年有个汽车产线升级项目,客户现场用的是RobotWare 6.05.0166版本,而我的RobotStudio里只有最新的7.x系列。RobotWare数据包本质上就是ABB机器人的"操作系统镜像",不同版本的机器人控制器需要匹配特定版本的RobotWare。有个容易忽略的细节:偶数版本号(如6.04、6.06)通常比奇数版本更稳定,因为ABB的内部发布策略是偶数版用于正式产线,奇数版多用于测试新功能。最终实现了零停机升级,这个经验告诉我们:版本切换不是简单的覆盖安装,而是需要系统性的验证流程。

weixin_30764883的博客 278

Java中的Lambda表达式以及Stream流

Lambda 表达式是 Java8 新增的重要特性,Lambda 使 Java 具有了类似函数式编程的风格,其实质也是由编译器根据表达式推断最终生成原始语法的字节码方式。Lambda表达式的使用与有关,函数式思想则尽量忽略面向对象的复杂语法:“强调做什么,而不是以什么形式去做”而我们要学习的Lambda表达式就是函数式思想的体现。Lambda表达式是Java 8引入的一种新特性,它是一种简洁、灵活的函数式编程方式,可以用来替代匿名内部类。Lambda表达式的使用规则如下:或。其中,

qq_59335499的博客 1093

逆向工程师必备:用MDL绕过游戏保护读取内存数据的完整流程(附POC代码)

本文深入探讨了内核级内存访问技术,重点介绍了如何利用MDL(Memory Descriptor List)机制稳定、隐蔽地绕过游戏反作弊系统读取进程内存。通过对比MmCopyVirtualMemory等方法的优劣,提供了完整的MDL映射实战代码与反检测策略,为逆向工程师在内核态进行安全内存操作提供了专业指导。

weixin_29227425的博客 625

Java8函数式编程(Lambda表达式,Stream流,Optional)

lambda表达式是Java8的一个新特性,从本质上来讲是一个匿名函数可以使用这个匿名函数实现接口中的方法,并且非常简洁。通常来讲,使用 lambda表达式 是为了。关于接口实现,可以有很多种方式来实现。例如L设计接口的实现类、使用匿名内部类。但是lambda表达式比这两种方式都简单。

qq_62767608的博客 4064

【STM32G474实战】RS485通信的DMA优化策略与性能对比

本文深入探讨了在STM32G474微控制器上优化RS485通信的DMA策略。通过对比轮询、中断和DMA三种数据传输方式的代码实现与性能,揭示了DMA在解放CPU、降低占用率方面的巨大优势。文章提供了详细的DMA配置指南、高级应用技巧(如结合空闲中断)以及一个高可靠通信框架的实战思路,旨在帮助开发者构建高效、实时的工业控制系统。

weixin_29268331的博客 304

Halcon手眼标定保姆级教程:从‘眼在手上’到‘眼到手’两种模式全解析(附代码)

本文详细解析Halcon在机器人视觉引导中的手眼标定技术,涵盖Eye-in-Hand和Eye-to-Hand两种模式,提供从硬件准备到实战代码的完整解决方案。通过精确的相机标定和坐标转换,帮助实现工业自动化中机械臂与视觉系统的高精度协同作业。

weixin_42544461的博客 209

Java8-Lambda表达式及Stream API

Java8、Lambda 表达式、函数式接口、Stream API

搬运Gong 1208

摆脱英文束缚!群晖Transmission4.0.4全新中文界面攻略

在群晖安装完官方Transmission4.0.4套件后,界面是英文状态的,不太好用。但是按照网上分享的原来4.0以前版本的方法更新UI又失败,所以自己搞了下成功了,分享给需要的朋友。

XiaoqiangClub的博客 5217

Java8的lambda表达式和Stream API

一直在用JDK8 ,却从未用过Stream,为了对数组或集合进行一些排序、过滤或数据处理,只会写for循环或者foreach,这就是我曾经的一个写照。 刚开始写写是打基础,但写的多了,各种乏味,非过来人不能感同身受。今天,我就要分享一篇如何解决上述问题的新方法 - Stream API。但学习Stream之前却不得不学一下Lambda表达式。说实话,网上介绍Lambda表达式的文章很多,大...

weixin_30456039的博客 132

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

lambda语法,java8Stream流,maven

Lambda表达式是一种匿名函数,通常用于简化代码、实现小型函数而不需要定义完整的函数。lambda也是一种语法糖,语法糖(Syntactic Sugar)指的是一种语言设计特性,允许程序员以更简洁、易读的方式编写代码。其实质上,它不增加语言的功能,只是提供了一种更方便的语法,使得程序员的编写和理解更加轻松。使用lamdba表达式要求一个抽象类或者接口里面只能有一个方法@FunctionalInterface添加了这个注解的抽象类只能有一个抽象方法匿名函数,把函数当作参数一样传递。

2302_78076476的博客 1252

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Day 03 - Lambda和Stream流

Lambda和Stream流 1.lambda概述 ​ Lambda 规定接口中只能有一个需要被实现的方法,不是规定接口中只能有一个方法。 ​ Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。 语法形式 ​ () -> {},其中 () 用来描述参数列表,{} 用来描述方法体,-> 为 lambda运算符 ,读作(goes to)。 语法简化 //1.简化参数类型,可以不写参

hfghrth的博客 2395

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

关于Java Lambda表达式看这一篇就够了

转自https://objcoding.com/2019/03/04/lambda/ JavaLambda表达式的一个重要用法是简化某些匿名内部类(Anonymous Classes)的写法。实际上Lambda表达式并不仅仅是匿名内部类的语法糖,JVM内部是通过invokedynamic指令来实现Lambda表达式的。具体原理放到下一篇。本篇我们首先感受一下使用Lambda表达式带来的便利之处。 Lambda and Anonymous Classes(I) 本节将介绍如何使用Lambda表达式简化.

2637

Java8函数式编程(Lambda表达式,Optional,Stream流)

Java8函数式编程(Lambda表达式,Optional,Stream流)

y516369的博客 834

JDK新特性(Lambda表达式,Stream流)

有且只有一个抽象方法的接口,用@FunctionalInterface去检测我们可以点击这个Comparator这个方法还有我们在线程章节经常用的Runnable接口这时候可能有人会想,Lambda表达式既然只能用函数式接口做为参数,那这个不是很鸡肋嘛难道我要自己去写一个接口,里面专门再只放一个抽象方法,那这不是更麻烦了嘛反正我刚刚学的时候,我确实是有这样的疑问后面问了GPT,其实这个lambda表达式大部分应该是和后面的Stream流一起使用的。

m0_73966521的博客 1485

lambda表达式去重java_Java8的lambda表达式和Stream API

一直在用JDK8 ,却从未用过Stream,为了对数组或集合进行一些排序、过滤或数据处理,只会写for循环或者foreach,这就是我曾经的一个写照。刚开始写写是打基础,但写的多了,各种乏味,非过来人不能感同身受。今天,我就要分享一篇如何解决上述问题的新方法 - Stream API。但学习Stream之前却不得不学一下Lambda表达式。说实话,网上介绍Lambda表达式的文章很多,大多晦涩难懂...

weixin_30041067的博客 447

Java中Lambda表达式与反射

概述:引用方法啥时候使用:被引用的方法要写在重写方法里面被引用的方法从参数上,返回值上要和所在的重写方法一致,而且引用的方法最好是操作重写方法的参数值的干掉重写方法的参数;干掉->;Stream<String> stream = Stream.of("今天", "明天", "后天");/** accept是重写方法:参数类型string 无返回值* accept方法里面有println方法:println参数类型位String被引用的方法操作重写方参数值println没有返回值* */

m0_70718945的博客 762

JavaSE核心知识点03高级特性03-04(Lambda表达式)

JavaSE核心知识点03高级特性03-04(Lambda表达式)

感谢阅读 2033

jdk1.8新特性:lambda表达式和stream流式操作

package com.hq; import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; public class Jdk8NewFeatureTest { public static void main(String[] args) { /** * lambda表达式由参数、箭头、表达式组成,举例:Testr1 * 参数:参数放()里面,如果有且只有一个参数,则().

qq_19952029的博客 651

Java 8 新特性:Lambda 表达式与 Stream 流,重构你的编码效率(下篇:stream流)

Java 8 引入的 Lambda 表达式和 Stream API 彻底革新了数据处理方式。Lambda 简化了函数式接口的使用,使代码更精炼;而 Stream 提供了强大的集合操作能力,支持函数式编程风格。本文将快速带领你掌握这两项特性,展示如何用更少的代码做更多的事情,提升开发效率和代码质量,让编程成为一门艺术。无论你是新手还是资深开发者,都将受益于这一现代 Java 编程之旅。

欢迎来到我的技术空间!我是一名经验丰富的Java开发工程师,热衷于分享我在软件开发领域的知识和心得。在这个博客里,您会发现一系列关于Java编程的文章,包括最佳实践、技术趋势、代码优化技巧以及一些有趣的项目案例。无论是初学者还是有经验的开发者,都能在这里找 818

Java—Java 8 新增特性详解(Predicate和Stream)

Predicate接口 Predicate接口介绍   Predicate是函数式接口,可以使用Lambda表达式作为参数。Java 8为集合Collection新增了removeIf(Predicate filter)方法,可以批量删除符合filter条件的所有元素。 Predicate接口使用范例 测试Collection的removeIf()方法。 示例1 1)运行类: public cla...

Andya_net的博客 1777
上一篇: netty-04-自定义协议
下一篇: Java并发-02-Java内存模型-续
ycmy2017
博客等级 码龄10年 2674粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值