《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的简单使用的更多相关文章

  1. Java8过滤器(Filter)

    1.在Java之前对List进行过滤的方式 public class BeforeJava8 { public static void main(String[] args) { List<Pe ...

  2. java 调用 C# 类库 实战视频, 非常简单, 通过 云寻觅 javacallcsharp 生成器 一步即可!

    java 调用 C# 类库 实战视频, 非常简单, 通过 云寻觅 javacallcsharp 生成器 一步即可! 通过 云寻觅 javacallcsharp 生成器 自动生成java jni类库,  ...

  3. MySQL实战 | 06/07 简单说说MySQL中的锁

    原文链接:MySQL实战 | 06/07 简单说说MySQL中的锁 本文思维导图:https://mubu.com/doc/AOa-5t-IsG 锁是计算机协调多个进程或纯线程并发访问某一资源的机制. ...

  4. 3.2 Lucene实战:一个简单的小程序

    在讲解Lucene索引和检索的原理之前,我们先来实战Lucene:一个简单的小程序! 一.索引小程序 首先,new一个java project,名字叫做LuceneIndex. 然后,在project ...

  5. Java8实战及自己的总结

    java8 介绍 java8是2014年3月份,由Oracle发布的一个版本,又称之为jdk1.8,是现再我们在学习和工作中用的最多的一个版本.   在jdk1.8中,java8以添加非常多的新特性, ...

  6. Java8实战——自己的总结

    java8 介绍   java8是2014年3月份,由Oracle发布的一个版本,又称之为jdk1.8,是现再我们在学习和工作中用的最多的一个版本.   在jdk1.8中,java8以添加非常多的新特 ...

  7. java8实战二------lambda表达式和函数式接口,简单就好

    一.Lambda 可以把Lambda表达式理解为简洁地i表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表.函数主体.返回类型,可能还是一个可以抛出的异常列表. 听上去,跟我们用的匿名类,匿名 ...

  8. Java8实战,

    Supplier 1, @FunctionalInterfacepublic interface Supplier<T> { 2,    T get(); 3, Supplier<A ...

  9. Meanshift filter实现简单图片的卡通化效果

        利用Meanshift filter和canny边缘检测的效果,可以实现简单的图片的卡通化效果.简单的说,就是用Meanshift filter的结果减去canny算法的结果得到卡通化的效果. ...

随机推荐

  1. 从输入URL到页面加载的过程?由一道题完善自己的前端知识体系!

    出处:http://mp.weixin.qq.com/s/qMsf4DcMhn2cf0fXC-PLVA 强缓存与弱缓存 缓存可以简单的划分成两种类型: 强缓存( 200fromcache)与 协商缓存 ...

  2. Linux shell 将字符串分割成数组

    原文链接:http://1985wanggang.blog.163.com/blog/static/776383320121745626320/ a="one,two,three,four& ...

  3. Linux之poll机制分析

    应用程序访问1个设备文件时可用阻塞/非阻塞方式.如果是使用阻塞方式,则直接调用open().read().write(),但是在驱动程序层会判断是否可读/可写,如果不可读/不可写,则将当前进程休眠,直 ...

  4. 批处理手动设置电脑的ip

    参考: http://blog.csdn.net/jiangzhanchang/article/details/7063152 http://wenda.haosou.com/q/1378697364 ...

  5. php 异步执行脚本

    这里说的异步执行是让php脚本在后台挂起一个执行具体操作的脚本,主脚本退出后,挂起的脚本还能继续执行.比如执行某些耗时操作或可以并行执行的操作,可以采用php异步执行的方式.主脚本和子脚本的通讯可以采 ...

  6. php输出异常的检查方法

    同事在用php展示验证码时,老是无法正常显示 但是的代码在别的地方正常运行 查看了输出,是有内容的,但是就是不显示 根据经验,应该是输出的内容有混淆,就是说在输出图片内容的时候,掺杂进去额外的信息 通 ...

  7. linux 内存映射-ioremap和mmap函数

    最近开始学习Linux驱动程序,将内存映射和ioremap,mmap函数相关资料进行了整理 一,内存映射  对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器 ...

  8. JavaWeb工程 目录结构***

    以下是mavaen推荐的项目目录. ├── pom.xml └── src     ├── main     │   ├── java     │   │   └── group     │   │  ...

  9. spring 基本配置学习

    1.bean的方式说明 作用:    用于配置对象让spring来创建的. 默认情况下它调用的是类中的无参构造函数.如果没有无参构造函数则不能创建成功. 属性: id:给对象在容器中提供一个唯一标识. ...

  10. 【Java】Java初始化过程总结

    概述 Java字节代码:byte[] Java类在JVM的表现形式:Class类的对象: Java源代码被编译成class字节码 : Java字节代码 --> Class类的对象: 加载:把Ja ...