Java8实战--引入流
时间:2022-07-23
本文章向大家介绍Java8实战--引入流,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
- 什么是流? 流是Java API的新成员,它允许你以声明性方式处理数据集合(通过查询语句来表达,而不 是临时编写一个实现)。就现在来说,你可以把它们看成遍历数据集的高级迭代器。此外,流还可以透明地并行处理,你无需写任何多线程代码。
啥话少说直接上代码:
//创建一个list类 里面包含一个对象Dish且创建Dish
List<Dish> menu = Arrays.asList(
new Dish("pork", false, 800, Dish.Type.MEAT), 3 new Dish("beef", false, 700, Dish.Type.MEAT),
new Dish("", false, 400, Dish.Type.MEAT),
new Dish("french fries", true, 530, Dish.Type.OTHER),
new Dish("rice", true, 350, Dish.Type.OTHER),
new Dish("season fruit", true, 120, Dish.Type.OTHER),
new Dish("pizza", true, 550, Dish.Type.OTHER),
new Dish("prawns", false, 300, Dish.Type.FISH), 5 new Dish("salmon", false, 450, Dish.Type.FISH) );
Dish类的定义是:
public class Dish {
private final String name;
private final boolean vegetarian;
private final int calories;
private final Type type;
public Dish(String name, boolean vegetarian, int calories, Type type) { this.name = name;
this.vegetarian = vegetarian;
this.calories = calories;
this.type = type;
}
public String getName() {
return name;
}
public boolean isVegetarian() {
return vegetarian;
}
public int getCalories() {
return calories;
}
public Type getType() {
return type;
}
@Override
public String toString() {
return name;
}
public enum Type { MEAT, FISH, OTHER }
}
现在我们用这两个集合和对象进行离操作
- 如果我们想将菜单里面的热量高于350的事物筛选出来:
List<Dish> collect = getDishes().stream().filter(t -> t.getCalories() > 350).collect(toList());
- 但是我们现在不要整个Dish对象 只要其中的某一个对象信息如只要菜名:
List<String> collect1 = getDishes().stream().filter(t -> t.getCalories() > 350).map(Dish::getName).collect(toList());
- 如果我们只想要筛选的菜名出来的前三个值:
List<String> collect2 = getDishes().stream().filter(t -> t.getCalories() > 350).limit(3).map(Dish::getName).collect(toList());
- 如果我们不想要热量大于350的前两个菜:
List<String> collect2 = getDishes().stream().filter(t -> t.getCalories() > 350).skip(3).map(Dish::getName).collect(toList());//当查出来的元素小于3的时候则返回数据为空
- 当我们需要将菜名的字母联合起来去掉重复的字母:
List<String> collect4 = getDishes().stream().map(Dish::getName).map(t -> t.split("")).flatMap(Arrays::stream).distinct().collect(toList());
- 查看菜单中是否至少有一个重复的菜品:
if( getDishes().stream().anyMatch(Dish::isVegetarian)){
System.out.println("The menu is (somewhat) vegetarian friendly!!");
}
7.查看菜单中所有的菜是否热量都是大于350的:
boolean isHealthy = getDishes().stream()
.allMatch(d -> d.getCalories() >350);
- 查找菜单中的某一个菜:
getDishes().stream().filter(t -> t.getCalories()==500).findAny().ifPresent(t -> System.out.println("获取菜名"+t.getName()));//如果这个菜有的话才会打印没有的话是不会打印的
- 查找菜单中热量为100的第一个菜的热量
getDishes().stream().filter(t -> t.getCalories() == 100).findFirst().ifPresent(d->System.out.println(d.getName()));
- 将菜单中的所有菜的热量加起来:
Integer reduce = getDishes().stream().map(Dish::getCalories).reduce(0, (a, b) -> a + b);//从零开始加加所有元素
- 获取热量最高的菜品名字
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Jenkins_流水线语法_001
- Jenkins_流水线语法_002
- Kubernetes组件
- Python第二十三课:递归斐波那契
- python递归函数
- Mysql 游标
- python小工具,通讯录小程序
- Python3基础:集合的使用
- 删除处于Terminating状态的namespace
- elasticSearch学习(七)
- Flutter透明度渐变动画FadeTransition实现透明度渐变动画效果
- iOS NSTimer不走的问题
- 我对python中的super()机制的一点理解
- 【Python】使用Pygame做一个Flappy bird小游戏(五)
- 【动手学深度学习笔记】之自定义层