频繁使用的语句

  Lambda又涉及到comparator和comparable区别(Comparable是实现comparable接口,实现后可以使用Collections.sort或Arrays.sort,而Comparator是个比较接口,内部有compare和equals函数,而

Labmda中的sort就是实现的后者comparator接口,具体可以见代码),匿名内部类实现和Lambda实现互相转换(Lambda就是把匿名内部类简化了),数组和链表的转换(lambda有toArray函数,Arrays.aslist可以转化成list)

        //Arrays循环输出
Arrays.stream(heros).forEach(System.out::println);
//Arrays排序
Arrays.stream(arr).sorted((arr1, arr2)-> arr2-arr1).forEach(System.out::println); //int[]的sorted方法无入参
//filter筛选
heros.stream().filter(hero -> testMethod(hero)).forEach(hero -> System.out.println(hero));
//map转换成list进行存储
List<String> temp = heros.stream().map(hero -> hero.getName() + "-" + hero.getHp() + "-" + hero.getDamage()).collect(Collectors.toList());
//得到某个对象
Hero firstHero = heros.stream().findFirst().get();

前言

  组长让我用Lambda加个功能的时候,网上搜到了使用教程,不是很熟练,趁着端午节详细学习一下Lambda相关内容.

Lambda简介

  1. 普通类:循环遍历集合,进行输出或比较
  2. 匿名类:实现接口的方法,循环编辑进行输出
  3. Lambda:简化代码,实际操作也是转换成匿名类进行处理。

Lambda引用类型(包含普通语句,静态方法,对象方法,容器对象方法,构造器,这里只写平时用得着的)

  1. 普通语句
List<Hero> list = new ArrayList<>();
list.stream().filter(h->h.getDamage() > 10 && h.getDamage() < 50).forEach(System.out::println);
  1. 静态方法
List<Hero> list = new ArrayList<>();
list.stream().filter(h->bewteen(h)).forEach(System.out::println);
private static boolean bewteen(Hero h){
return h.getDamage() > 10 && h.getDamage() < 50;
}

Lambda聚合类型

对元素进行筛选:

filter 匹配

distinct 去除重复(根据equals判断)

sorted 自然排序

sorted(Comparator) 指定排序

limit 保留

skip 忽略

转换为其他形式的流

mapToDouble 转换为double的流

map 转换为任意类型的流

forEach() 遍历每个元素

toArray() 转换为数组

min(Comparator) 取最小的元素

max(Comparator) 取最大的元素

count() 总数

findFirst() 第一个元素

上述功能介绍
package lambda;

import charactor.Hero;

import java.util.*;
import java.util.stream.Collectors; /**
* @author :Empirefree
* @description:TODO
* @date :2020/6/25 14:50
*/
public class testLambda4 {
public static void main(String[] args) {
Random r = new Random();
List<Hero> heros = new ArrayList<Hero>();
for(int i = 0; i < 10; i++) {
heros.add(new Hero("hero " + i, r.nextInt(1000), r.nextInt(100)));
}
// filter(heros, h->testMethod(h));
/* //制造重复元素
heros.add(heros.get(0));
heros.stream().filter(hero -> testMethod(hero)).forEach(hero -> System.out.println(hero));
System.out.println("============去重");
heros.stream().distinct().forEach(hero -> System.out.println(hero));
System.out.println("============自然排序");
heros.stream().sorted().forEach(hero -> System.out.println(hero));
System.out.println("============按规则排序");
heros.stream().sorted((h1, h2)->h1.getHp() >= h2.getHp() ? 1: -1).forEach(hero -> System.out.println(hero));
System.out.println("============只输出3个");
heros.stream().limit(3).forEach(System.out::println);
System.out.println("============忽略前3个");
heros.stream().skip(3).forEach(System.out::println);
System.out.println("============转化为double流");
heros.stream().mapToDouble(Hero::getHp).forEach(System.out::println);
System.out.println("============转化为任意类型的流");
heros.stream().map(hero -> hero.getName() + "-" + hero.getHp() + "-" + hero.getDamage()).forEach(System.out::println);
List<String> temp = heros.stream().map(hero -> hero.getName() + "-" + hero.getHp() + "-" + hero.getDamage()).collect(Collectors.toList());
System.out.println("============map转换成list存储");
System.out.println(temp);*/
Object[] objects = heros.stream().toArray();
// List<Hero> temp = Arrays.asList(objects); System.out.println("============转化为数组");
System.out.println(Arrays.toString(objects));
Hero minDamageHero = heros.stream().min((h1, h2)->h1.getDamage() - h2.getDamage()).get();
System.out.println(minDamageHero);
Hero maxDamagehero = heros.stream().max((h1, h2)->h1.getDamage() - h2.getDamage()).get();
System.out.println(maxDamagehero);
long cout = heros.stream().count();
System.out.println(cout);
Hero firstHero = heros.stream().findFirst().get();
System.out.println(firstHero);
}
private static boolean testMethod(Hero hero){
return hero.getDamage() > 10 && hero.getDamage() < 60;
}
private static void filter(List<Hero> heros, heroChecker checker) {
for (Hero hero : heros) {
if (checker.test(hero)) {
System.out.print(hero);
}
}
}
}
匿名内部类与Lambda+链表和数组转换+排序
package lambda;

import charactor.Hero;

import java.lang.reflect.Array;
import java.util.*; /**
* @author :Empirefree
* @description:TODO
* @date :2020/6/25 12:07
*/
public class test {
public static void main(String[] args) {
Long l1 = new Long(100);
Long l2 = new Long(200);
System.out.println(l1.equals(l2));
System.out.println(l1.longValue() < l2.longValue());
/*
Integer[] arr = {4, 1, 3, 5, 6, 7, 9, 1};
*/
/* Arrays.sort(arr, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});*//* Arrays.stream(arr).sorted((arr1, arr2)-> arr2-arr1).forEach(System.out::println);
*/ /* List<String> heroes = new LinkedList<>();
heroes.add("asdf");
String[] temp = new String[]{"1243", "asdf"};
for (String string : temp){
System.out.println(string);
}
heroes.toArray(temp);
System.out.println(heroes);
System.out.println(temp);
for (String string : temp){
System.out.println(string);
}
List<String> hero2 = Arrays.asList(temp);
System.out.println(hero2);*/
}
}

Java-Lambda相关使用介绍的更多相关文章

  1. [刘阳Java]_Spring相关配置介绍_第5讲

    这一节我们介绍一下Spring框架的相关常用配置 Spring依赖注入的两种方式(构造方法注入和setter方式注入) p-namespace方式配置 properties属性文件配置方式 集合对象配 ...

  2. java#lambda相关之方法引用

    lambda在java中通常是()->{}这样的方式,来书写的.通常的lambda是四大函数型接口的一个“实现”. 如果我们要写的lambda已经有现成的实现了,那么就可以把现成的实现拿过来使用 ...

  3. Java 11 新特性介绍

    Java 11 已于 2018 年 9 月 25 日正式发布,之前在Java 10 新特性介绍中介绍过,为了加快的版本迭代.跟进社区反馈,Java 的版本发布周期调整为每六个月一次——即每半年发布一个 ...

  4. Java 12 新特性介绍,快来补一补

    Java 12 早在 2019 年 3 月 19 日发布,它不是一个长久支持(LTS)版本.在这之前我们已经介绍过其他版本的新特性,如果需要可以点击下面的链接进行阅读. Java 11 新特性介绍 J ...

  5. Java Lambda表达式初探

    Java Lambda表达式初探 前言 本文受启发于Trisha Gee在JavaOne 2016的主题演讲Refactoring to Java 8. Java 8已经发行两年多,但很多人仍然在使用 ...

  6. Java Lambda简明教程(一)

    Lambda表达式背景 许多热门的编程语言如今都有一个叫做lambda或者闭包的语言特性,包括比较经典的函数式编程语言Lisp,Scheme,也有稍微年轻的语言比如JavaScript,Python, ...

  7. java web服务器tomcat介绍【转载】

    机器矩阵2016-08-10 22:14 java程序员亲切地称他为tom猫,看到这只猫可以说明1 服务器部署成功了 ,2 网络是联通的. 到底这只猫是什么来头呢? tomcat是Apache基金会下 ...

  8. java之网络爬虫介绍

    文章大纲 一.网络爬虫基本介绍二.java常见爬虫框架介绍三.WebCollector实战四.项目源码下载五.参考文章   一.网络爬虫基本介绍 1. 什么是网络爬虫   网络爬虫(又被称为网页蜘蛛, ...

  9. Java线程相关的热门面试题

    ---恢复内容开始--- 下面是Java线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序 ...

随机推荐

  1. H5性能分析

    一.所有的浏览器都会支持一个W3C的标准 具体标准可以查看:https://www.w3.org/TR/navigation-timing/ 资源加载指标分析: Prompt for unload:访 ...

  2. Java虚拟机栈和PC寄存器

    PC Register介绍 JVM中的程序计数寄存器(Program Counter Register)中,Register 的命名源于CPU的寄存器,寄存器存储指令相关的现场信息.CPU只有把数据装 ...

  3. Cookie&Session-授课

    1 会话技术 1.1 会话管理概述 1.1.1 什么是会话 会话:浏览器和服务器之间的多次请求和响应 为了实现一些功能,浏览器和服务器之间可能会产生多次的请求和响应,从浏览器访问服务器开始,到访问服务 ...

  4. 『政善治』Postman工具 — 13、Postman接口测试综合练习

    目录 (一)项目接口文档 1.鉴权接口 2.注册接口 3.登录接口 4.用户信息接口 5.注销接口 (二)网站上手动验证 (三)Postman测试实现 1.准备工作 (1)创建一个Collection ...

  5. Node.js核心模块API之文件操作

    参考:https://www.runoob.com/nodejs/nodejs-fs.html 异步I/O 1,文件操作 2,网络操作 在浏览器中也存在异步操作 1,定时任务 2,事件处理 3,Aja ...

  6. 一、python入门练习题

    题目: 练习1:华氏温度转摄氏温度. 练习2:输入圆的半径计算计算周长和面积. 练习3:输入年份判断是不是闰年. 答案: 练习1: """ 将华氏温度转换为摄氏温度 F ...

  7. 在/etc/profile下配置java的环境变量

    在/etc/profile下配置java的环境变量 原创 Java 作者:xiaoyan5686670 时间:2016-01-18 14:30:28  6152  0 以root用户编辑:#vi /e ...

  8. Windows 电脑的四种运行状态工作状态 (Working), S0 睡眠状态 (Sleep), S1 或 S3 休眠状态 (Hibernate), S4 关机状态 (Shutdown), S5

    == Windows 电脑的四种运行状态 == 这四种运行状态(或称电源状态)是: 工作状态 (Working), S0 睡眠状态 (Sleep), S1 或 S3 休眠状态 (Hibernate), ...

  9. 怎样使用yum-cron为CentOS7自动更新重要的安全补丁

    怎样使用yum-cron为CentOS自动更新重要的安全补丁 2017年4月19日 | 分类: [技术] 参考:https://linux.die.net/man/8/yum-cron参考:http: ...

  10. 003.Python数据类型转换

    一 自动类型转换 (针对于Number类型) bool float int complex 当Number不同的数据类型进行运算的时候,默认向更高精度转化 精度从低到高顺序:bool -> in ...