Lambda表达式是Java SE 8中一个重要的新特性。你可以把 Lambda表达式 理解为是一段可以传递的代码 (将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。

  Lambda运算符:所有的Lambda表达式都是用新的Lambda运算符 " => ",可以叫他,“转到”或者 “成为”。运算符将表达式分为两部分,左边指定输入参数,右边是Lambda的主体。

  在平常 我们可以要通过sql  对数据进行过滤、分组、转化等,如果非常频繁,会对数据库增加负担,我们这里就可以简单使用Lambda表达式

1、准备一个Object类

import java.math.BigDecimal;

public class AObject {

    private String a;

    private String b;

    private BigDecimal money;

    private Integer num;

    public String getA() {
return a;
} public void setA(String a) {
this.a = a;
} public String getB() {
return b;
} public void setB(String b) {
this.b = b;
} public BigDecimal getMoney() {
return money;
} public void setMoney(BigDecimal money) {
this.money = money;
} public Integer getNum() {
return num;
} public void setNum(Integer num) {
this.num = num;
} @Override
public String toString(){
return a+" "+b;
} }

2、Lambda使用

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; public class StreamUtils { public static void main(String args[]){
listToMap();
filter();
// groupingBy();
// sum(); } /**
* List<T> -> Map
* 需要注意的是:
* toMap 如果集合对象有重复的key,会报错Duplicate key ....
* 可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2
*/
public static void listToMap() {
List<AObject> aList = new ArrayList<>();
AObject aObject = new AObject();
aObject.setA("a");
aObject.setB("B");
AObject aObject1 = new AObject();
aObject1.setA("a1");
aObject1.setB("B1");
aList.add(aObject);
aList.add(aObject1); Map<String, AObject> map = aList.stream().
collect(Collectors.toMap(AObject::getA, AObject->AObject,(k1,k2)->k1));
for(Map.Entry<String, AObject> entry : map.entrySet()){
System.out.println("key:"+entry.getKey()+" value:"+entry.getValue().toString());
}
// key:a1 value:a1 B1
// key:a value:a B Map<String, String> map1 = aList.stream().
collect(Collectors.toMap(AObject::getA, AObject::getB,(k1,k2)->k1));
for(Map.Entry<String, String> entry : map1.entrySet()){
System.out.println("key:"+entry.getKey()+" value:"+entry.getValue());
}
// key:a1 value:B1
// key:a value:B } /**
* 过滤
*/
public static void filter() {
List<String> aList = new ArrayList<>();
aList.add("1");
aList.add("a");
List<String> slist =aList.stream().filter(e -> "a".equals(e)).collect(Collectors.toList());
System.out.println(slist.toString());// [a] List<AObject> list = new ArrayList<>();
AObject aObject = new AObject();
aObject.setA("110000");
aObject.setB("北京");
AObject aObject2 = new AObject();
aObject2.setA("330000");
aObject2.setB("浙江");
list.add(aObject);
list.add(aObject2);
List<AObject> newList =list.stream().filter(e -> e.getA().equals("110000")).collect(Collectors.toList());
System.out.println(newList.toString());// [110000 北京]
} /**
* 分组
*/
public static void groupingBy(){
List<AObject> list = new ArrayList<>();
AObject aObject = new AObject();
aObject.setA("110000");
aObject.setB("北京");
AObject aObject1 = new AObject();
aObject1.setA("110000");
aObject1.setB("北京1");
AObject aObject2 = new AObject();
aObject2.setA("330000");
aObject2.setB("浙江");
AObject aObject3 = new AObject();
aObject3.setA("330000");
aObject3.setB("浙江1");
list.add(aObject);
list.add(aObject1);
list.add(aObject2);
list.add(aObject3);
//groupingBy 只传key 默认把整个集合关联, 也可以把集合某个数据属性 当做集合取出来,如下groupBy1
Map<String, List<AObject>> groupBy = list.stream().collect(Collectors.groupingBy(AObject::getA));
for(Map.Entry<String, List<AObject>> item : groupBy.entrySet()){
System.out.print(item.getKey()+" : ");
for(AObject a : item.getValue()){
System.out.print(a.toString()+";");
}
System.out.println();
}
//110000 : 110000 北京;110000 北京1;
//330000 : 330000 浙江;330000 浙江1; Map<String, List<String>> groupBy1 = list.stream().collect(
Collectors.groupingBy(AObject::getA, Collectors.mapping(AObject::getB, Collectors.toList())));
for(Map.Entry<String, List<String>> item : groupBy1.entrySet()){
System.out.print(item.getKey()+" : ");
for(String a : item.getValue()){
System.out.print(a+";");
}
System.out.println();
}
// 110000 : 北京;北京1;
// 330000 : 浙江;浙江1;
} /**
* 求和
*/
public static void sum(){
List<AObject> list = new ArrayList<>();
AObject aObject = new AObject();
aObject.setMoney(new BigDecimal("100"));
aObject.setNum(100);
AObject aObject1 = new AObject();
aObject1.setMoney(new BigDecimal("200"));
aObject1.setNum(200);
AObject aObject2 = new AObject();
aObject2.setMoney(new BigDecimal("300"));
aObject2.setNum(300);
AObject aObject3 = new AObject();
aObject3.setMoney(new BigDecimal("400"));
aObject3.setNum(400);
list.add(aObject);
list.add(aObject1);
list.add(aObject2);
list.add(aObject3);
//注意的是 求和的属性 值不能为null
BigDecimal totalMoney = list.stream().map(AObject::getMoney).
reduce(BigDecimal.ZERO, BigDecimal::add);
System.out.println("totalMoney:"+totalMoney); // totalMoney:1000
Integer totalMoney1 = list.stream().map(AObject::getNum).
reduce(0, Integer::sum);
System.out.println("totalSum:"+totalMoney1); // totalSum:1000
int sum = list.stream().mapToInt(AObject::getNum).sum();
System.out.println("sum:"+sum);// sum:1000
} }

Java中Lambda表达式的简单使用的更多相关文章

  1. Java中Lambda表达式的使用

    简介(译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能.本人建议不要乱用,因 ...

  2. Java中Lambda表达式的使用(转)

    https://www.cnblogs.com/franson-2016/p/5593080.html 简介(译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖" ...

  3. Java中lambda表达式详解

    原文地址:http://blog.laofu.online/2018/04/20/java-lambda/ 为什么使用lambda 在java中我们很容易将一个变量赋值,比如int a =0;int ...

  4. 快速掌握Java中Lambda表达式的用法

    Lambda表达式的作用: Lambda表达式的作用就是简化代码开发,让代码看起来更加简介.它是用来简化匿名内部类的.但是并不是所有的匿名内部类都能用Lambda表达式简化,Lambda表达式是有使用 ...

  5. Java中lambda(λ)表达式的语法

    举一个排序的例子,我们传入代码来检查一个字符串是否比另一个字符串短.这里要计算: first.length() - second.length() first和second是什么?他们都是字符串.Ja ...

  6. 为什么Java中lambda表达式不能改变外部变量的值,也不能定义自己的同名的本地变量呢?

    作者:blindpirate链接:https://www.zhihu.com/question/361639494/answer/948286842来源:知乎著作权归作者所有.商业转载请联系作者获得授 ...

  7. Java中Lambda表达式基础及使用详解

    概述 Lambda 是JDK 8 的重要新特性.它允许把函数作为一个方法的参数(函数作为参数传递进方法中),使用 Lambda 表达式可以使代码变的更加简洁紧凑,使Java代码更加优雅. 标准格式 三 ...

  8. Java中lambda表达式学习

    一.Lambda表达式的基础语法: Java8中引入了一个新的操作符"->"该操作符称为箭头操作符或Lambda操作符,箭头操作符将Lambda表达式拆分为两部分: 左侧:L ...

  9. Java中Lambda表达式的进化之路

    Lambda表达式的进化之路 为什么要使用Lambda表达式 可以简洁代码,提高代码的可读性 可以避免匿名内部类定义过多导致逻辑紊乱 在原先实现接口抽象方法的时候,需要通过定义一个实现接口的外部类来实 ...

随机推荐

  1. kafka基本机制

    Kafka目前主要作为一个分布式的发布订阅式的消息系统使用,下面简单介绍一下kafka的基本机制 1.3.1 消息传输流程 Producer即生产者,向Kafka集群发送消息,在发送消息之前,会对消息 ...

  2. vue——介绍和使用

    一.vue介绍 vue官网说:Vue.js(读音 /vjuː/,类似于 view) 是一套构建用户界面的渐进式的JavaScript框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计. ...

  3. BZOJ3033: 太鼓达人(欧拉回路)

    题意 题目链接 Sol 第一问的答案是\(2^M\),因为每个位置只有\(0 / 1\)两种情况,最优情况下一定是每个位置代表着一个长度为\(K\)的字符串 考虑相邻两个字符串之间的转化,第二个字符串 ...

  4. 《ArcGIS Runtime SDK for Android开发笔记》——(15)、要素绘制Drawtools3.0工具DEMO

    1.前言 移动GIS项目开发中点线面的要素绘制及编辑是最常用的操作,在ArcGIS Runtime SDK for iOS 自带AGSSketchLayer类可以帮助用户快速实现要素的绘制,图形编辑. ...

  5. 笨办法学Python(三十八)

    习题 38: 阅读代码 现在去找一些 Python 代码阅读一下.你需要自己找代码,然后从中学习一些东西.你学到的东西已经足够让你看懂一些代码了,但你可能还无法理解这些代码的功能.这节课我要教给你的是 ...

  6. 云盘+Git GUI实现云盘文件版本号控制

    以下介绍操作细节 1.先下载Git GUI 下载地址:http://msysgit.github.io/       再下载百度云网盘 下载地址:http://pan.baidu.com 接下来就是安 ...

  7. PIL 图像字符画绘制

    from PIL import Image ascii_char = list('"$%_&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]? ...

  8. 【转】eclipse 错误信息 "File Search" has encounter a problem 解决

    在eclipse中使用搜索功能,发生错误: "File Search" has encounter a problem 仔细看了一下自动跳出的错误日志(Error Log),发现: ...

  9. 2018.11.11 Java的 三大框架:Struts+Hibernate+Spring

    ·定义:Java三大框架主要用来做WEN应用.Struts主要负责表示层的显示: Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作): Hibernate主要是数据持久化到数据库. ...

  10. 随机森林算法-Deep Dive

    0-写在前面 随机森林,指的是利用多棵树对样本进行训练并预测的一种分类器.该分类器最早由Leo Breiman和Adele Cutler提出.简单来说,是一种bagging的思想,采用bootstra ...