Java lambda 表达式常用示例
- 实体类
package com.lkb.java_lambda.dto;
import lombok.Data;
/**
* @program: java_lambda
* @description: dto
* @author: lkb
* @create: 2020-01-19 17:15
*/
@Data
public class Person implements Comparable<Person>{
public Person(){}
public Person(int id, String name, int age, String addr, int gender, double salary,String remark){
this.id = id;
this.age = age;
this.name = name;
this.addr = addr;
this.gender = gender;
this.salary = salary;
this.remark = remark;
}
public Person(Person person) {
this.id = person.id;
this.name = person.name;
this.age = person.age;
this.addr = person.addr;
this.gender = person.gender;
this.salary = person.salary;
this.remark = person.remark;
}
@Override
public int compareTo(Person o) {
if(this.salary > o.getSalary()){
return 1;
}else{
return -1;
}
}
private int id;
private String name;
private int age;
private String addr;
/**
* 0-女 1-男
*/
private int gender;
private double salary;
private String remark;
}
- 测试类
package com.lkb.java_lambda;
import cn.hutool.json.JSONUtil;
import com.lkb.java_lambda.dto.Person;
import java.awt.print.Book;
import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;
/**
* @program: java_lambda
* @description: 测试类
* @author: lkb
* @create: 2020-01-19 17:18
*/
public class Test {
private static List<Person> personList = new LinkedList<>();
private static void init(){
Person person = new Person();
person.setId(1);
person.setName("Lisa");
person.setGender(0);
person.setAge(24);
person.setAddr("中国深圳");
person.setSalary(15000d);
personList.add(person);
person = new Person();
person.setId(2);
person.setName("Tom");
person.setGender(1);
person.setAge(27);
person.setAddr("中国深圳");
person.setSalary(18000d);
personList.add(person);
person = new Person();
person.setId(3);
person.setName("Benny");
person.setGender(1);
person.setAge(22);
person.setAddr("中国北京");
person.setSalary(22000d);
personList.add(person);
person = new Person();
person.setId(4);
person.setName("Jenny");
person.setGender(0);
person.setAge(29);
person.setAddr("中国上海");
person.setSalary(33000d);
personList.add(person);
person = new Person();
person.setId(5);
person.setName("David");
person.setGender(1);
person.setAge(37);
person.setAddr("中国北京");
person.setSalary(22000d);
personList.add(person);
}
public static void main(String[] args) {
init();
//List -> Map key是list中对象某一个段,value是整个对象
//(key1,key2)->key1 是为了避免重复key(重复key会抛出异常)
Map<Integer,Person> map = personList.stream().collect(Collectors.toMap(Person::getId, person -> person,(key1, key2)->key1));
System.out.println(JSONUtil.toJsonStr(map));
//List -> Map key是list中对象某一个段,value是某个字段
Map<Integer,String> nameMap = personList.stream().collect(Collectors.toMap(Person::getId, person -> person.getName(),(key1, key2)->key1));
System.out.println(JSONUtil.toJsonStr(nameMap));
//list遍历
personList.stream().forEach(p-> System.out.println(p.getName()));
//根据某一条件过滤
List<Person> personList1 = personList.stream().filter(p->p.getSalary()<20000d).collect(Collectors.toList());
System.out.println(JSONUtil.toJsonStr(personList1));
//根据多个条件过滤
List<Person> personList2 = personList.stream().filter(p->p.getSalary()<20000d && p.getGender() == 1).collect(Collectors.toList());
System.out.println(JSONUtil.toJsonStr(personList2));
//根据多个条件过滤
Predicate<Person> predicate1 = p->p.getSalary()<20000d;
Predicate<Person> predicate2 = p-> p.getAddr().equals("中国深圳");
List<Person> personList3 = personList.stream().filter(predicate1.and(predicate2)).collect(Collectors.toList());
System.out.println(JSONUtil.toJsonStr(personList3));
//去除重复的数据
Person person = new Person();
person.setId(5);
person.setName("David");
person.setGender(1);
person.setAge(37);
person.setAddr("中国北京");
person.setSalary(22000d);
personList.add(person);
List<Person> personList4 = personList.stream().distinct().collect(Collectors.toList());
System.out.println(JSONUtil.toJsonStr(personList4));
//copy list
personList = personList4.stream().map(Person::new).collect(Collectors.toList());
System.out.println(JSONUtil.toJsonStr(personList));
//根据某一条件去重
List<Person> personList5 = personList.stream().collect(
Collectors.collectingAndThen(
Collectors.toCollection(
()->new TreeSet<>(Comparator.comparing(Person::getAddr))),ArrayList::new));
System.out.println(JSONUtil.toJsonStr(personList5));
//取list中某个字段组成新的list
List<String> names = personList.stream().map(Person::getName).collect(Collectors.toList());
System.out.println(JSONUtil.toJsonStr(names));
//返回满足条件的数量
long num = personList.stream().filter(p->p.getAddr().equals("中国北京")).filter(p->p.getSalary() > 20000d).count();
System.out.println("num = " + num);
//按条件过滤,没有符合的返回给定值
Person per = personList.stream().filter(p->p.getSalary()>50000d).findAny().orElse(null);
if(Objects.isNull(per)){
System.out.println("没有找到符合条件的person");
}
//查找第一个符合条件的数据
Person per2 = personList.stream().filter((p->p.getSalary()>20000d)).findFirst().orElse(null);
if(Objects.nonNull(per2)){
System.out.println("第一个符合条件的人物是 " + JSONUtil.toJsonStr(per2));
}
//按照某个条件排序
//默认按照自然排序
List<Person> personList6 = personList.stream().sorted(Comparator.comparing(Person::getAge)).collect(Collectors.toList());
System.out.println(JSONUtil.toJsonStr(personList6));
//自定义比较项目 然后进行排序
//Person 类实现 Comparable 接口 重写compareTo方法 1-升序 -1-降序
//这里我定义了按照salary升序排列
List<Person> personList7 = personList.stream().sorted().collect(Collectors.toList());;
System.out.println(JSONUtil.toJsonStr(personList7));
//遍历处理
personList.stream().forEach(p-> {
if(p.getAddr().equals("中国北京")){
p.setRemark("北京人");
}
});
System.out.println(JSONUtil.toJsonStr(personList));
}
}
最近看外国小哥的一个lambda视频觉得讲得很好,大家是可以看看,这个视频
个人总结一下:
Java 是面向对象,但有的时候面向过程、动作会更加轻量级一点,
所以Java lambda 就是将动作作为参数,再重量级的面向对象参杂一些面向过程的tools帮助我们更快捷地实现功能,更优雅地编程。
不知道上诉总结对不对,目前看来非常符合我在项目中使用lambda表达式的场景。
Java lambda 表达式常用示例的更多相关文章
- Lambda表达式常用代码示例
Lambda表达式常用代码示例 2017-10-24 目录 1 Lambda表达式是什么2 Lambda表达式语法3 函数式接口是什么 3.1 常用函数式接口4 Lambdas和Streams结合使 ...
- Java基础学习总结(44)——10个Java 8 Lambda表达式经典示例
Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Ja ...
- Java Lambda表达式教程与示例
Lambda表达式是Java 8中引入的一个新特性.一个lambda表达式是一个匿名函数,而且这个函数没有名称且不属于任何类.lambda表达式的概念最初是在LISP编程语言中引入的. Java La ...
- Java Lambda表达式入门[转]
原文链接: Start Using Java Lambda Expressions http://blog.csdn.net/renfufei/article/details/24600507 下载示 ...
- Java Lambda表达式初探
Java Lambda表达式初探 前言 本文受启发于Trisha Gee在JavaOne 2016的主题演讲Refactoring to Java 8. Java 8已经发行两年多,但很多人仍然在使用 ...
- Java Lambda表达式入门
Java Lambda表达式入门 http://blog.csdn.net/renfufei/article/details/24600507 Java 8十个lambda表达式案例 http://w ...
- Java Lambda表达式forEach无法跳出循环的解决思路
Java Lambda表达式forEach无法跳出循环的解决思路 如果你使用过forEach方法来遍历集合,你会发现在lambda表达式中的return并不会终止循环,这是由于lambda的底层实现导 ...
- 「Flink」使用Java lambda表达式实现Flink WordCount
本篇我们将使用Java语言来实现Flink的单词统计. 代码开发 环境准备 导入Flink 1.9 pom依赖 <dependencies> <dependency> < ...
- java lambda表达式学习笔记
lambda是函数式编程(FP,functional program),在java8中引入,而C#很早之前就有了.在java中lambda表达式是'->',在C#中是‘=>’. 杜甫说:射 ...
随机推荐
- Linux网络IO模型
同步和异步,阻塞和非阻塞 同步和异步 关注的是结果消息的通信机制 同步:同步的意思就是调用方需要主动等待结果的返回 异步:异步的意思就是不需要主动等待结果的返回,而是通过其他手段比如,状态通知,回调函 ...
- 小心Powershell的位数
我们都知道64位的 Windows 中有两个Powershell,32位的 Windows Powershell(x86)和64位的 Windows Powershell.(当然,32位的Window ...
- Caffe源码-几种优化算法
SGD简介 caffe中的SGDSolver类中实现了带动量的梯度下降法,其原理如下,\(lr\)为学习率,\(m\)为动量参数. 计算新的动量:history_data = local_rate * ...
- JSR-133内存模型手册
1.介绍 JVM支持多种线程的执行,Threads代表的是线程类,位于java.lang.Thread包下,唯一的方式就是为用户在这个类下的对象创建线程,每一个线程关联着一个对象,一个线程将在star ...
- python之面向对象中的多态
直接看代码: class Dog: def __init__(self,name): self.name = name def play(self): print("%s在汪汪汪" ...
- 使用rapidjson把文本json数据解析到树状结构
一个递归搞定 无聊的时候练练手就写了一个 头文件什么的我就不贴了 demo程序是MFC写的 void ParseObject(rapidjson::Value dc, CTreeCtrl * pTre ...
- 【题解】P5446 [THUPC2018]绿绿和串串(manacher)
[题解]P5446 [THUPC2018]绿绿和串串(manacher) 考虑对于一个串进行\(f\)操作,就是让他变成一个以最后一个节点为回文中心的回文串. 那么对于某个位置\(p\),假如它是一个 ...
- 洛谷$P3647\ [APIO2014]$连珠线 换根$dp$
正解:换根$dp$ 解题报告: 传送门! 谁能想到$9102$年了$gql$居然还没写过换根$dp$呢,,,$/kel$ 考虑固定了从哪个点开始之后,以这个点作为根,蓝线只可能是直上直下的,形如&qu ...
- 洛谷$P4126\ [AHOI2009]$最小割 图论
正解:网络流+$tarjan$ 解题报告: 传送门$QwQ$ $umm$最小割的判定问题$QwQ$,因为并不会做是看的题解才会的,所以也没什么推导过程直接放结论趴$QwQ$ 首先跑个最大流,然后有. ...
- Linux常用命令大全(四)
Linux常用命令大全(四) shell的特点 ☆组合新命令 ☆提供了文件名扩展字符 ☆直接使用shell的内置命令 ☆灵活地使用数据流 ☆结构化的程序模块 ☆在后台执行命令 ☆可配置的环境 ☆高级的 ...