Java 8 lambda表达式引入详解及实例
作者:蹭饭熊 发布时间:2022-10-25 22:41:37
标签:Java8,lambda
Java 8 lambda表达式引入详解及实例
eclipse下载安装
Help -> EclipseMarketplace -> 搜索Java 8 Kepler ->Java 8 support for eclipse Kepler SR2 安装完成后需要重启
Android Studio
在project的build.gradle文件中添加
buildscript {
dependencies {
classpath 'me.tatarka:gradle-retrolambda:3.2.5'
}
}
在app的build.gradle文件中添加
apply plugin: 'me.tatarka.retrolambda'
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
使用
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.Stream.Builder;
public class LambdaTest {
public static void main(String[] args) {
String[] str = new String[] { "Lambdas", "Lambdas", "Default Method", "Stream API", "Date and Time API" };
List<String> strList = Arrays.asList(str);
System.out.println("----------------------------> 默认遍历");
strList.stream().forEach(item -> {
System.out.println(item);
});
System.out.println("----------------------------> 默认遍历简化写法");
strList.stream().forEach(System.out::println);
// limit输出指定个数
System.out.println("limit ---------------------------->");
strList.stream().limit(2).forEach(System.out::println);
// 去掉重复数据
System.out.println("distinct ---------------------------->");
strList.stream().distinct().forEach(System.out::println);
// filter过滤器,筛选出符合条件的值
System.out.println("filter ---------------------------->");
Predicate<String> contain = item -> item.contains("API");// 只是用于匹配条件的如int可以用条件运算符等
strList.stream().filter(contain).forEach(System.out::println);
System.out.println("filter简化写法 ---------------------------->");
strList.stream().filter(item -> item.contains("API")).forEach(System.out::println);
System.out.println("AND ---------------------------->");
Predicate<String> contain1 = item -> item.contains("API");
Predicate<String> contain2 = item -> item.contains("Time");
strList.stream().filter(contain1.and(contain2)).forEach(System.out::println);
System.out.println("OR ---------------------------->");
strList.stream().filter(contain1.or(contain2)).forEach(System.out::println);
// 向每个字符后追加
System.out.println("map ---------------------------->");
// 对Stream中包含的元素使用给定的转换函数进行转换操作,生成的Stream只包含转换生成的元素。
// mapToInt,mapToLong和mapToDouble是对int、long、double进行操作的
strList.stream().map(item -> item + String.valueOf(1)).forEach(System.out::println);
// 向每个字符后追加
System.out.println("flatMap ---------------------------->");
// flatMap:和map类似,不同的是其每个元素转换得到的是Stream对象,会把子Stream中的元素压缩到父集合
strList.stream().flatMap(item -> getCharacter(item)).forEach(System.out::println);
System.out.println("peek ---------------------------->");
// peek 需调用collect
strList.stream().map(String::toUpperCase).peek(System.out::println).collect(Collectors.toList());
System.out.println("skip ---------------------------->");
// 丢弃原Stream的前N个元素后剩下元素组成的新Stream
strList.stream().skip(3).forEach(System.out::println);
// 统计个数
System.out.println("count ---------------------------->" + strList.stream().count());
// allMatch:是不是Stream中的所有元素都满足给定的匹配条件
boolean allMatch1 = strList.stream().allMatch(item -> item.contains("a"));
System.out.println("allMatch --------------> " + allMatch1);
boolean allMatch2 = strList.stream().allMatch(item -> item.contains("API"));
System.out.println("allMatch --------------> " + allMatch2);
// anyMatch:Stream中是否存在任何一个元素满足匹配条件
boolean anyMatch1 = strList.stream().anyMatch(item -> item.contains("Stream API"));
System.out.println("anyMatch --------------> " + anyMatch1);
boolean anyMatch2 = strList.stream().anyMatch(item -> item.contains("Stream API1"));
System.out.println("anyMatch --------------> " + anyMatch2);
// findFirst: 返回Stream中的第一个元素,如果Stream为空,返回空Optional
Optional<String> findFirst = strList.stream().findFirst();
// isPresent方法用来检查Optional实例是否有值。
if (findFirst.isPresent()) {
// 调用get()返回Optional值。如果Optional没有值调和则抛出NoSuchElementException。
System.out.println("findFirst --------------> " + findFirst.get());
}
System.out.print("findFirst简化写法 --------------> ");
// 如果存在值,则使用该值调用,否则不执行任何操作。
strList.stream().findFirst().ifPresent(System.out::println);
// noneMatch:是不是Stream中的所有元素都不满足给定的匹配条件
boolean noneMatch1 = strList.stream().noneMatch(item -> item.contains("Stream API"));
System.out.println("noneMatch --------------> " + noneMatch1);
boolean noneMatch2 = strList.stream().noneMatch(item -> item.contains("zzzzz"));
System.out.println("noneMatch --------------> " + noneMatch2);
System.out.println("newStrList ---------------------------->");
List<String> newStrList = strList.stream().filter(item -> item != null)
.collect(() -> new ArrayList<String>(), (list, item) -> list.add(item), (list1, list2) -> list1.addAll(list2));
newStrList.stream().forEach(System.out::println);
System.out.println("newStrList简化写法 ---------------------------->");
List<String> newStrList1 = strList.stream().filter(item -> item != null).collect(Collectors.toList());
newStrList1.stream().forEach(System.out::println);
System.out.println("sorted 排序---------------------------->");
// strList.stream().sorted();
strList.stream().sorted(Comparator.comparing(String::length)).forEach(System.out::println);
;
// max和min:使用给定的比较器(Operator),返回Stream中的最大|最小值
Integer[] ints = new Integer[] { 7, 2, 3, 10, 5, 1, 6, 8, 9, 4 };
List<Integer> intList = new ArrayList<Integer>();
intList = Arrays.asList(ints);
System.out.print("max --------------> ");
intList.stream().max((o1, o2) -> o1.compareTo(o2)).ifPresent(System.out::println);
System.out.print("max简化写法 --------------> ");
// Comparable<Integer> Integer.compare(int arg0, int arg1)
intList.stream().max(Integer::compare).ifPresent(System.out::println);
System.out.print("min --------------> ");
intList.stream().min((o1, o2) -> o1.compareTo(o2)).ifPresent(System.out::println);
System.out.print("min简化写法 --------------> ");
// Comparable<Integer> Integer.compare(int arg0, int arg1)
intList.stream().min(Integer::compare).ifPresent(System.out::println);
System.out.println("reduce单参数 ---------------------------->");
System.out.println(intList.stream().reduce((result, element) -> result = result + element));
System.out.println("reduce双参数 ---------------------------->");
System.out.println(intList.stream().reduce(0, (result, element) -> result = result + element));
System.out.println("generate ---------------------------->");
// 生成一个无限长度的Stream,其中值是随机的。这个无限长度Stream是懒加载,一般这种无限长度的Stream都会配合Stream的limit()方法来用。
Stream.generate(Math::random).limit(2).forEach(System.out::println);
System.out.println("iterate ---------------------------->");
// 也是生成无限长度的Stream,和generator不同的是,其元素的生成是重复对给定的种子值,调用用户指定函数来生成的
Stream.iterate(12, item -> item + 1).limit(2).forEach(System.out::println);
}
public static Stream<String> getCharacter(String s) {
Builder<String> builder = Stream.builder();
builder.add(s);
builder.accept("1");
return builder.build();
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


猜你喜欢
- 前言在学习android中图形图像处理技术这部分内容时,对绘制圆弧函数canvas.drawArc()的用法、参数含义及画图原理很是不理解,
- 1. JWT的概念和特点JWT是一种轻量级、可扩展、可自包含的身份验证和授权机制。它是由三个部分组成:头部(Header)、载荷(Paylo
- 前面已经认识了不同的数据类型,你们有没有尝试过让不同的数据类型进行运算呢?int a = 1;double b = a;Console.Wr
- Spring框架的关键组件是面向方面编程(AOP)框架。面向方面的编程不仅打破程序逻辑分成不同的部分称为所谓的担忧。跨越多个点的应用程序的功
- Java * 代理设计模式定义:为其他对象提供一种代理以控制对这个对象的访问。 * 使用java * 机制以巧妙的方式实现了代理模式的
- * 其实就是java.lang.reflect.Proxy类动态的根据您指定的所有接口生成一个class byte,该class会继承P
- 用java实现循环队列的方法:1、添加一个属性size用来记录眼下的元素个数。目的是当head=rear的时候。通过size=0还是size
- C#中的DateTime.Compare()方法用于比较两个DateTime实例。它返回一个整数值,<0-如果date1早于date2
- 题外由于idea原因 用注解test无法在控制台上输入所以写死到程序里了,版本都30.9102了为什么还是这样啊,intelJ你们该反思了!
- Visual Studio 2019 Vue项目 创建成功后可看到如下结构 Visual Studio 2019配置vue项目具体文件结构如
- 本文实例为大家分享了Unity实现弹球打砖块游戏的具体代码,供大家参考,具体内容如下创作界面记录摄像机所需脚本1射线shexianusing
- 前言最近在学习网络原理,突然萌发出自己实现一个网络服务器的想法,并且由于第三代小白机器人的开发需要,我把之前使用python、PHP写的那部
- 1. Limit实现分页1.1 为什么需要分页 减少数据的处理量1.2 使用Limit实现分页select * from user limi
- 1.Object类的equals()方法:比较两个对象是否是同一个对象,equals() 方法比较两个对象,是判断两个对象引用指向的是同一个
- 本文实例为大家分享了人脸认证源码faceIdentify的具体代码,供大家参考,具体内容如下人脸认证:using AForge.Video.
- 总体实现思路是启动一个生产者项目注册, 将所含服务注册到zookeeper的注册中心, 然后在启动一个消费者项目,将所需服务向zookeep
- config.json 文件内容如下{"Data": {"DefaultConnection": {
- 一、背景在实际开发中,对于 不需要任何准确计算精度的属性可以直接使用float或double,但是如果需要精确计算结果,则必须使用BigDe
- 前言在阅读本文之前, 希望你可以思考一下下面几个问题, 带着问题去阅读文章会获得更好的效果。发送消息的时候, 当Broker挂掉了,消息体还
- 使用lombok插件的好处我们在java开发过程中,经常会有一些常规性的,重复性的工作。比如:根据成员变量生成get和set方法根据成员变量