频繁使用的语句

  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. 在微信框架模块中,基于Vue&Element前端的后台管理功能介绍

    微信开发包括公众号.企业微信.微信小程序等方面的开发内容,需要对腾信的微信API接口进行封装:包括事件.菜单.订阅用户.多媒体文件.图文消息.消息群发.微信支付和企业红包.摇一摇设备.语义理解.微信小 ...

  2. docker中运行envoy 报错 cannot bind '0.0.0.0:80': Permission denied

    docker-compose文件 version: '3' services: envoy: image: envoyproxy/envoy-alpine:v1.15-latest volumes: ...

  3. [DB] 大数据集群安装

    学习要点 体系架构.原理 多做练习.试验 装虚拟机 网络模式:仅主机模式 software selection:development tools, GUI network & host na ...

  4. 3.1.5 LTP(Linux Test Project)学习(五)-LTP代码学习

    3.1.5 LTP(Linux Test Project)学习(五)-LTP代码学习 Hello小崔 ​ 华为技术有限公司 Linux内核开发 2 人赞同了该文章 LTP代码学习方法主要介绍两个步骤, ...

  5. g77介绍 g77 是 Fortran77 的编译器。它对 Fortran 77 标准提供完备的支持,并支持 Fortran 90 和 95 的部分特性。 由于 Fortran 77 标准在数值计算中的影响力,g77 可能是应用最广的Fortran编译器。 在 GCC 4.0 之前,g77 是 GCC 的一部分,但现在,g77 已经停止开发。

    GFORTRAN 维基百科,自由的百科全书     跳到导航 跳到搜索 此条目需要扩充. (2018年11月2日)请协助改善这篇条目,更进一步的信息可能会在讨论页或扩充请求中找到.请在扩充条目后将此模 ...

  6. Ansible_实施处理程序

    一.Ansible配置处理程序 1.处理程序 1️⃣:处理程序是响应由其他任务触发的通知的任务 2️⃣:仅当任务在受管主机上更改了某些内容时,任务才通知其处理程序 3️⃣:每个处理程序具有全局唯一的名 ...

  7. systemd 进程管理详解

    systemd进程管理 systemd管理的优势 1.最新系统都采用systemd管理(RedHat7,CentOS7,Ubuntu15...) 2.CentOS7 支持开机并行启动服务,显著提高开机 ...

  8. nosql数据库之Redis概念及基本操作

    一.概述 redis是一种nosql数据库(非关系型数据库),他的数据是保存在内存中,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化,并且他比memcached支持更多的数据结构(st ...

  9. MyBatis 环境搭建(四)

    MyBatis 引言 在回顾JDBC时,我们已经创建有 Java 工程,而且也已经导入 mysql 依赖包,这里就直接在原有工程上搭建MyBatis环境,以及使用MyBatis来实现之前用 JDBC ...

  10. xxl-job使用遇到的问题(二)

    xxl-job使用遇到的问题(二) 关联阅读 xxl-job使用遇到的问题(一) 1.问题现象 最近有个老定时任务迁移到xxl-job的时候,遇到一个小问题.虽然很快解决,但是还是有必要记录一下~ j ...