前言 这里创建一个商品实体类Goods用于演示stream的常用方法(如下) import java.util.ArrayList; import java.util.List; public class Main { List<Goods> list = new ArrayList<Goods>(){ { add(new Goods(1, "女子减震休闲鞋", "鞋子", 999.00));
} }).start(); } 而如果使用lambda表达式: @Test public void runable() { new Thread(() -> System.out.println(“It’s a lambda function!”)).start(); } 最后的输出: The old runable now is using! It’s a lambda function! 是不是强大到可怕?是不是简单到可怕?是不是清
一、Java8新特性 Lambda表达式:允许把函数作为一个方法的参数传递到方法中。方法引用:可以直接引用已有Java类或对象(实例)的方法或构造器。默认方法 − 默认方法就是一个在接口里面有了一个实现的方法。新工具 :Nashorn引擎 jjs、类依赖分析器jdeps。Stream API :函数式编程风格引
一、对单体对象非空判断 ifPresent() 示例如下: DtoClass dtoClass = new DtoClass("狗子", null, null); Optional.ofNullable(dtoClass).ifPresent(dto ->{ System.out.println("不为空才执行:"+dto.getName()); }); 测试结果: 如果 dtoClass 参数为空,则不会输出 二、
俺的理解: 以洗剪吹一条龙的方式对集合进行操作(代码简洁优雅,一行代码就可以解决),得到最终我们想要的结果,假如我们有一个List(可以理解成一个顾客队列), 这时候来了一个顾客,我们对它进行洗剪吹(比如:看看他钱够不够不够就轰走:money>10(filter),让他的头发变短一厘米:hire-=1(map))还有其它操
流与集合 众所周知,日常开发与操作中涉及到集合的操作相当频繁,而java中对于集合的操作又是相当麻烦。这里你可能就有疑问了,我感觉平常开发的时候操作集合时不麻烦呀?那下面我们从一个例子说起。 计算从伦敦来的艺术家的人数 请注意这个问题例子在本篇博客中会经常提
Java8新特性的功能已经更新了不少篇幅了,今天重点讲解时间日期库中DateTime相关处理。同样的,如果你现在依旧在项目中使用传统Date、Calendar和SimpleDateFormat等API来处理日期相关操作,这篇文章你一定不要错过。来刷新你的知识库吧! 背景 Java对日期、日历及时间的处理一直以来都饱
java8 stream api 随记 实体类测试类map()findAny()和findFirst()filter()peek()allMatch()和anyMatch()distinct()直接使用达不到效果将需要去重的部分单独独立,如将age去重自定义去重方法 count()limit()max()和min()skip()noneMatch()forEachOrdered()toArray()sorted()升序降序多属性升序多属性降序
函数式接口 接口中只有一个抽象方法的口,称为函数式接口,可以使用注解@FunctionInterface 修饰 @FunctionInterface : 可以检查接口是否为函数式接口 内置四大核心函数式接口 Consumer 消费型接口 void accept(T t); @Test public void test5(){ happy("hello world", str ->
方法引用 若 Lambda 体中的内容有方法已经实现了,我们可以使用方法引用 (可以理解为方法引用是 Lambda 表达式的另一种表现形式) 主要三种语法格式 对象::实例方法名 注意:需要函数式接口方法的入参和返回值 == 引用的对象方法的入参和返回值 @Test public void test1(){
背景在最近的工作开发之中,慢慢习惯了很多Java8中的Stream的用法,很方便而且也可以并行的去执行这个流,这边去写一下昨天遇到的一个list转map的场景。list转map在Java8中stream的应用常用方式1.利用Collectors.toMap方法进行转换 public Map<Long, String> getIdNameMap(List<Accoun
描述 我们先看一段使用了并行流的代码 1 2 3 4 5 6 7 8 9 10 11 @Test public void testStream() { List<Integer> list = new ArrayList<>(); for (int i = 0; i < 10000; i++) { list.add(i); } System.out.
文章目录 前言一、返回数据展示?返回情况有两种,一种是data有数据,一种是没有数据 二、报错场景复现二.Optional 优雅解决1.java8提供 optional这个类来进行判断处理,以及判空后的业务逻辑处理2.optional类ofofNULLableisPresentgetifPresent orElseorElseGetorElseThrowmapf
Java8函数式接口很多,知道这四大核心的就ok了,其他的以此类推。 1.消费型接口:Consumer @FunctionalInterface public interface Consumer<T> { /** * Performs this operation on the given argument. * * @param t the input argument */ void accep
1、Stream API的基本介绍 Java 8 API添加了一个新的抽象称为流 Stream,可以让你以一种声明的方式处理数据。Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。 Stream 是Java8中处理集合的关键抽象概念,它可以对集合进行非常复杂的查找、过滤、筛选
package com.zs.boot.controller; import org.junit.Test; import java.time.*; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; import java.util.Set; public class TestlocalDateTime { //5. DateTimeFormatter : 解
注意List 使用前需要做非空处理 1.以某个属性分组 Map<String,List<User>> map= userList.stream().collect(Collectors.groupingBy(User::getName)); 2.获取集合中的某个属性转为集合 pictureList.stream().map(Picture::getSrc).collect(Collectors.toList()); 3.根据集合中
package com.zs.boot.controller; import java.util.concurrent.RecursiveTask; public class ForkJoinCalculate extends RecursiveTask<Long> { private long start; private long end; public ForkJoinCalculate(long start, long end) { t
#将list集合中所有的id字段转为list List collect = users.stream().map(User::getUserId).collect(Collectors.toList()); View Code #将list集合中所有的id字段转为list并且去重 List collect = users.stream().map(User::getUserId).distinct().collect(Collectors.toList
idea 使用docker 插件链接docker 容器发布springboot项目 文章目录 idea 使用docker 插件链接docker 容器发布springboot项目1 docker 配置远程访问1.1 修改配置文件1.2 修改配置1.3 重启docker 服务1.4 查看服务器端口监听状态1.5 关闭防火墙1.6 测试docker 远程连通性1.7
Java8 中引入了一个特别有意思类:Optional,一个可以让我们更加轻松的避免 NPE(空指针异常,NullPointException)的工具。 很久很久以前,为了避免 NPE,我们会写很多类似if (obj != null) {}的代码,有时候忘记写,就可能出现 NPE,造成线上故障。在 Java 技术栈中,如果谁的代码出现了 NPE,有极大的
Java8新特性之 Lambda表达式 Lambda的标准格式 (参数类型 参数名称) -> {代码体; } 格式说明: (参数类型 参数名称):参数列表{代码体;}:方法体->:箭头,分隔参数列表和方法体 Lambda的语法非常简洁,但是Lambda表达式不是随便使用的,Lambda表达式的前提条件: 方法的参数或变量
支持顺序和并行聚合操作的一系列元素。 看一个JAVA 8_API(地址:https://www.matools.com/api/java8)的示例: int sum = widgets.stream() .filter(w -> w.getColor() == RED) .mapToInt(w -> w.getWeight()) .sum(); 分析:widgets
Function 函数式接口 使用注解@FunctionalInterface标识,并且只包含一个抽象方法的接口是函数式接口。函数式接口主要分为: Supplier供给型函数:Supplier的表现形式为不接受参数、只返回数据。 Consumer消费型函数:Consumer接收一个参数,没有返回值。 Runnable无参无返回型函数:Runnab
/** * 【接口中 默认方法 有方法体】 * JDK8之前,接口中可以定义 变量、方法: * 变量 必须 为 public static final修饰 * 方法 必须 为 public abstract 修饰 * * JDK8及以后,接口中可以定义 普通方法(有方法体)