java8实战:filter的简单使用
《JAVA8实战》中的例子
要实现的功能:通过Apple的color或weight属性,对List<Apple>进行筛选。
1、首先定义com.owl.entity.Apple:
package com.owl.entity;
public class Apple {
private String color;
private Integer weight;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public Integer getWeight() {
return weight;
}
public void setWeight(Integer weight) {
this.weight = weight;
}
}
2、生成一个简单的List<Apple>集合
package com.owl.app;
import java.util.ArrayList;
import java.util.List;
import com.owl.entity.Apple;
public class demo {
public static void main(String[] args) {
List<Apple> appleList = new ArrayList<Apple>();
Apple redApple = new Apple();
redApple.setColor("red");
redApple.setWeight(180);
appleList.add(redApple);
Apple greenApple = new Apple();
greenApple.setColor("green");
greenApple.setWeight(120);
appleList.add(greenApple);
}
}
3、在com.owl.entity.Apple中定义筛选条件(绿苹果或者重量大于150的苹果)
public static boolean isGreenApple(Apple apple) {
return "green".equals(apple.getColor());
}
public static boolean isHeavyApple(Apple apple) {
return apple.getWeight() > 150;
}
4、在com.owl.app.demo中定义接口:
public interface Predicate<T> {
boolean test(T t);
}
5、在com.owl.app.demo中定义filter方法:
static List<Apple> AppleFilter(List<Apple> apples, Predicate<Apple> p) {
List<Apple> resultApples = new ArrayList<Apple>();
for (Apple apple:apples) {
if(p.test(apple)) {
resultApples.add(apple);
}
}
return resultApples;
}
6、在main函数中使用filter筛选苹果(需要定义行为类isGreenApple、isHeavyApple)
List<Apple> greenAppleSet = AppleFilter(appleList, Apple::isGreenApple);
List<Apple> heavyAppleSet = AppleFilter(appleList, Apple::isHeavyApple);
System.out.println("=======绿苹果=======");
for (Apple apple:greenAppleSet) {
System.out.println(apple.getColor());
}
System.out.println("=======大苹果=======");
for (Apple apple:heavyAppleSet) {
System.out.println(apple.getWeight());
}
结果:

为了实现上述功能,除了需要定义筛选条件之外,仍需要定义Predicate<T>和AppleFilter方法未免太过麻烦,通过lambda表达式有更简单的写法:
List<Apple> greenAppleSet = appleList.stream().filter((Apple apple)->apple.getColor().equals("green")).collect(Collectors.toList());
List<Apple> heavyAppleSet = appleList.stream().filter((Apple apple)->apple.getWeight()>150).collect(Collectors.toList());
System.out.println("=======绿苹果=======");
for (Apple apple:greenAppleSet) {
System.out.println(apple.getColor());
}
System.out.println("=======大苹果=======");
for (Apple apple:heavyAppleSet) {
System.out.println(apple.getWeight());
}
涉及到较大的数据集的时候,可以采用并行处理的方式进行筛选:
List<Apple> greenAppleSet = appleList.parallelStream().filter((Apple apple)->apple.getColor().equals("green")).collect(Collectors.toList());
List<Apple> heavyAppleSet = appleList.parallelStream().filter((Apple apple)->apple.getWeight()>).collect(Collectors.toList());
或者使用匿名函数的形式:
List<Apple> greenAppleSet = AppleFilter(appleList, new Predicate<Apple>() {
public boolean test(Apple apple) {
return "green".equals(apple.getColor());
};
});
List<Apple> heavyAppleSet = AppleFilter(appleList, new Predicate<Apple>() {
public boolean test(Apple apple) {
return apple.getWeight() > 150;
};
});
System.out.println("=======绿苹果=======");
for (Apple apple:greenAppleSet) {
System.out.println(apple.getColor());
}
System.out.println("=======大苹果=======");
for (Apple apple:heavyAppleSet) {
System.out.println(apple.getWeight());
}
java8实战:filter的简单使用的更多相关文章
- Java8过滤器(Filter)
1.在Java之前对List进行过滤的方式 public class BeforeJava8 { public static void main(String[] args) { List<Pe ...
- java 调用 C# 类库 实战视频, 非常简单, 通过 云寻觅 javacallcsharp 生成器 一步即可!
java 调用 C# 类库 实战视频, 非常简单, 通过 云寻觅 javacallcsharp 生成器 一步即可! 通过 云寻觅 javacallcsharp 生成器 自动生成java jni类库, ...
- MySQL实战 | 06/07 简单说说MySQL中的锁
原文链接:MySQL实战 | 06/07 简单说说MySQL中的锁 本文思维导图:https://mubu.com/doc/AOa-5t-IsG 锁是计算机协调多个进程或纯线程并发访问某一资源的机制. ...
- 3.2 Lucene实战:一个简单的小程序
在讲解Lucene索引和检索的原理之前,我们先来实战Lucene:一个简单的小程序! 一.索引小程序 首先,new一个java project,名字叫做LuceneIndex. 然后,在project ...
- Java8实战及自己的总结
java8 介绍 java8是2014年3月份,由Oracle发布的一个版本,又称之为jdk1.8,是现再我们在学习和工作中用的最多的一个版本. 在jdk1.8中,java8以添加非常多的新特性, ...
- Java8实战——自己的总结
java8 介绍 java8是2014年3月份,由Oracle发布的一个版本,又称之为jdk1.8,是现再我们在学习和工作中用的最多的一个版本. 在jdk1.8中,java8以添加非常多的新特 ...
- java8实战二------lambda表达式和函数式接口,简单就好
一.Lambda 可以把Lambda表达式理解为简洁地i表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表.函数主体.返回类型,可能还是一个可以抛出的异常列表. 听上去,跟我们用的匿名类,匿名 ...
- Java8实战,
Supplier 1, @FunctionalInterfacepublic interface Supplier<T> { 2, T get(); 3, Supplier<A ...
- Meanshift filter实现简单图片的卡通化效果
利用Meanshift filter和canny边缘检测的效果,可以实现简单的图片的卡通化效果.简单的说,就是用Meanshift filter的结果减去canny算法的结果得到卡通化的效果. ...
随机推荐
- win10:如何开启自带虚拟机
1.首先要找到控制面板,我们点开windows键,然后选择在所有应用中找到“Windows 系统”,打开之后,我们找到“控制面板”,打开. 2.打开控制面板之后,我们选择程序,如图示. 3 ...
- Maven install报MojoFailureException
[ERROR] 位置: 类 com.spark.test.JavaDirectKafkaWordCount [ERROR] /I:/TrueTimeControlOnSparkByJava/src/m ...
- 安装tensorflow,那叫一个坑啊
最近,项目团队需要研究并应用AI的技术,在具体的产品实施环节中使用.之前的几个项目,是委托武汉大学给做的,基于keras框架,实现了一些图像识别的项目. 这不,上方希望自己能够掌握一些常用且成熟的AI ...
- FPGA中关于SPI的使用
FPGA中关于SPI的使用 信息来源 SPI Flash的编程 最新的SPI不止有4根信号线,可以增加到支持4bit的数据宽度 SPI Flash Basics 能够扩展成4bit数据的是MOSI信号
- SDI视频采集过程
SDI视频采集过程 GTP收发模块为视频采集系统的核心部分,包含发送和接收,完成对信号的解串和串码.并且HD-SDI信号中并非所有的信号都是有效视频信号,这部分功能由数据分析模块实现,并将提取出来的有 ...
- Python入门 [输出,注释,列表,元祖,集合,字典,if,while,for]
print("Hello Python") #输出 ''' 多行注释 用 三个引号 ''' a=1 #赋值 变量首字母只能书字母下划线 第二个字符数字,字母,下划线 声明一个列表 ...
- line-height的理解
font-size:0清除display:inline-block元素换行符间隙,比如两个img标签之间有换行符 行内元素的高度是由其行高决定的. Div或者其他元素内的图片,底部会有间隙,原因是图片 ...
- ALGO-31_蓝桥杯_算法训练_开心的金明(DP)
问题描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎 么布置,你说了算,只要不超过N元钱就行”.今 ...
- PHP在Linux下的套件LNMP
LNMP官网:https://lnmp.org/install.html 另外不要忘了Azkaban和WhereHows
- 三星GT-N8010刷机教程
本刷机教程只针对三星GT-N8010机器(以下简称GT-N8010),以下操作本人已在GT-N8010机器上亲测,且都成功,其它机器没有测试不能保证成功. 刷机有风险,请谨慎使用!请先备份资料和信息. ...