Java-Lambda相关使用介绍
频繁使用的语句
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简介
- 普通类:循环遍历集合,进行输出或比较
- 匿名类:实现接口的方法,循环编辑进行输出
- Lambda:简化代码,实际操作也是转换成匿名类进行处理。
Lambda引用类型(包含普通语句,静态方法,对象方法,容器对象方法,构造器,这里只写平时用得着的)
- 普通语句
List<Hero> list = new ArrayList<>();
list.stream().filter(h->h.getDamage() > 10 && h.getDamage() < 50).forEach(System.out::println);
- 静态方法
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相关使用介绍的更多相关文章
- [刘阳Java]_Spring相关配置介绍_第5讲
这一节我们介绍一下Spring框架的相关常用配置 Spring依赖注入的两种方式(构造方法注入和setter方式注入) p-namespace方式配置 properties属性文件配置方式 集合对象配 ...
- java#lambda相关之方法引用
lambda在java中通常是()->{}这样的方式,来书写的.通常的lambda是四大函数型接口的一个“实现”. 如果我们要写的lambda已经有现成的实现了,那么就可以把现成的实现拿过来使用 ...
- Java 11 新特性介绍
Java 11 已于 2018 年 9 月 25 日正式发布,之前在Java 10 新特性介绍中介绍过,为了加快的版本迭代.跟进社区反馈,Java 的版本发布周期调整为每六个月一次——即每半年发布一个 ...
- Java 12 新特性介绍,快来补一补
Java 12 早在 2019 年 3 月 19 日发布,它不是一个长久支持(LTS)版本.在这之前我们已经介绍过其他版本的新特性,如果需要可以点击下面的链接进行阅读. Java 11 新特性介绍 J ...
- Java Lambda表达式初探
Java Lambda表达式初探 前言 本文受启发于Trisha Gee在JavaOne 2016的主题演讲Refactoring to Java 8. Java 8已经发行两年多,但很多人仍然在使用 ...
- Java Lambda简明教程(一)
Lambda表达式背景 许多热门的编程语言如今都有一个叫做lambda或者闭包的语言特性,包括比较经典的函数式编程语言Lisp,Scheme,也有稍微年轻的语言比如JavaScript,Python, ...
- java web服务器tomcat介绍【转载】
机器矩阵2016-08-10 22:14 java程序员亲切地称他为tom猫,看到这只猫可以说明1 服务器部署成功了 ,2 网络是联通的. 到底这只猫是什么来头呢? tomcat是Apache基金会下 ...
- java之网络爬虫介绍
文章大纲 一.网络爬虫基本介绍二.java常见爬虫框架介绍三.WebCollector实战四.项目源码下载五.参考文章 一.网络爬虫基本介绍 1. 什么是网络爬虫 网络爬虫(又被称为网页蜘蛛, ...
- Java线程相关的热门面试题
---恢复内容开始--- 下面是Java线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序 ...
随机推荐
- 问渠那得清如许?为有源头活水来——对【近取Key】产品进行的深度测评与解析
在 Build To Show 的场景中,大家各显身手,用各种办法展现技术,的确很难在单一的维度上确定谁赢谁输.但是,在 Build To Win 的场景中,往往市场就是那么一块, 竞争对手占了 70 ...
- 3D高清电商购物小图标图片_在线商城三维icon图标素材大全
3D高清电商购物小图标图片_在线商城三维icon图标素材大全
- Spring Boot 2.5.0 发布:支持Java16、Gradle 7、Datasource初始化机制调整
今年520的事情是真的多,娱乐圈的我们不管,就跟DD一起来看看 Spring Boot 2.5.0 的发布吧!看看都带来了哪些振奋人心的新特性和改动! 主要更新 支持 Java 16 支持 Gradl ...
- http://www.loongnix.org/index.php/Lbrowser
http://www.loongnix.org/index.php/Lbrowser 浏览器是桌面应用的核心API软件,龙芯中科早在2011年就开始组建浏览器研发团队开展基于gecko.blink等内 ...
- 008.Python循环for循环
for 循环 特指用于遍历容器类型数据,(遍历 循环 迭代 都是一个意思)就是把所有的数据一个一个拿出来的过程, while循环有局限性,不能遍历无序容器数据 setvar = {"a&qu ...
- kvm虚拟化安装与部署(2)
一.虚拟化VT开启确认 KVM 本身也有一些弱点,那就是相比裸金属虚拟化架构的 Xen . VMware ESX 和 HyperV , KVM 是运行在 Linux 内核之上的寄居式虚拟化架构,会消耗 ...
- CGI开发-(转自 jemofh159)
随着Internet技术的兴起,在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,这种程序结构也就是大家非常熟悉的B/S结构,即在嵌入式设备上运行一个支持脚本或CGI功能的Web服务器, ...
- Python小白的数学建模课-A1.2021年数维杯C题(运动会优化比赛模式探索)探讨
Python小白的数学建模课 A1-2021年数维杯C题(运动会优化比赛模式探索)探讨. 运动会优化比赛模式问题,是公平分配问题 『Python小白的数学建模课 @ Youcans』带你从数模小白成为 ...
- Linux(CentOS7)下配置多个tomcat
记录 Linux(CentOS7) 下配置多个 tomcat 的操作过程. 一.下载tomcat 前提:安装配置好jdk环境,未配置可参考Linux(CentOS7)下安装jdk1.8. 从 tomc ...
- [论文阅读笔记] Unsupervised Attributed Network Embedding via Cross Fusion
[论文阅读笔记] Unsupervised Attributed Network Embedding via Cross Fusion 本文结构 解决问题 主要贡献 算法原理 实验结果 参考文献 (1 ...