频繁使用的语句

  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. Ubuntu执行命令时,不sudo提示权限不足,sudo提示找不到该命令

    问题:Ubuntu执行命令时,不sudo提示权限不足,sudo提示找不到该命令 补充描述:尝试将命令所在路径添加到/etc/profile中(所有用户环境变量),结果sudo -i切换到root用户后 ...

  2. Form-OCR & CSDNAPP初体验

    项目 内容 课程:北航2020春软件工程 博客园班级博客 作业:阅读并撰写博客回答问题 软件案例分析 我在这个课程的目标是 全面地评价一个软件 这个作业在哪个具体方面帮助我实现目标 明确软件开发过程中 ...

  3. Jetpack Compose What and Why, 6个问题

    Jetpack Compose What and Why, 6个问题 1.这个技术出现的背景, 初衷, 要达到什么样的目标或是要解决什么样的问题. Jetpack Compose是什么? 它是一个声明 ...

  4. Docker镜像讲解

    Docker镜像讲解 镜像是什么 镜像是一种轻量级的,可执行的独立软件包,用来打包软件运行环境和基于运行环境的开发软件,它包含运行某个软件做需要的所有的内容,包括代码,运行时,库,环境变量和配置文件. ...

  5. CRM帮助B2B企业持续改善战略决策「下篇」

    尽管数据早已深入人心,但依然有相当比率的B2B企业在管理和战略决策时依赖直觉而不是客户数据.不停变化的B2B市场表明了以客户为中心的趋向和格局,CRM客户管理系统能够协助您更好的使用客户数据并最大限度 ...

  6. JVM内存溢出后服务还能运行吗

    文章开篇问一个问题吧,一个java程序,如果其中一个线程发生了OOM,那进程中的其他线程还能运行吗? 接下来做实验,看看JVM的六种OOM之后程序还能不能访问. 在这里我用的是一个springboot ...

  7. Jsp授课

    2.1 JSP基础 2.1.1 JSP简介 JSP全称是Java Server Page,是一种动态网页技术标准.它和Servlet一样,也是sun公司推出的一套开发动态web资源的技术,称为JSP/ ...

  8. JAVA基础——运算符号

    运算符(java) 算数运算符:+,-,*,/,%(取余),++,-- 赋值运算符:= 关系运算符:<, >, >= ,<= ,== , != 逻辑运算符:&& ...

  9. CentOS 7 设置时区、日期和时间

    CentOS 7 设置时区.日期和时间 changhr2013关注 2019.04.19 01:33:09字数 307阅读 139 在 CentOS 7 中,引入了一个叫 timedatectl 的设 ...

  10. Ubuntu 16.04 Bridge配置

    Ubuntu 16.04 Bridge配置 一.安装网桥拓展包 bridge-utils root@ubuntu:~# apt-get install bridge-utils 二.创建网桥设备 // ...