使用Java 8新增的Predicate操作来操作集合

原创 2017年04月12日 09:43:52

Java 8为Collection集合新增了一些需要Predicate参数的方法,这些方法可以对集合元素进行过滤。程序可使用Lambda表达式构建Predicate对象。

1 代码示例

import java.util.*;
import java.util.function.*;

public class PredicateTest2
{
	public static void main(String[] args)
	{
		// 创建books集合、为books集合添加元素的代码与前一个程序相同。
		Collection books = new HashSet();
		books.add(new String("轻量级Java EE企业应用实战"));
		books.add(new String("疯狂Java讲义"));
		books.add(new String("疯狂iOS讲义"));
		books.add(new String("疯狂Ajax讲义"));
		books.add(new String("疯狂Android讲义"));
		// 统计书名包含“疯狂”子串的图书数量
		System.out.println(calAll(books , ele->((String)ele).contains("疯狂")));
		// 统计书名包含“Java”子串的图书数量
		System.out.println(calAll(books , ele->((String)ele).contains("Java")));
		// 统计书名字符串长度大于10的图书数量
		System.out.println(calAll(books , ele->((String)ele).length() > 10));
		
		// 使用Lambda表达式(目标类型是Predicate)过滤集合
		books.removeIf(ele -> ((String)ele).length() < 10);
		System.out.println(books);
	}
	public static int calAll(Collection books , Predicate p)
	{
		int total = 0;
		for (Object obj : books)
		{
			// 使用Predicate的test()方法判断该对象是否满足Predicate指定的条件
			if (p.test(obj))
			{
				total ++;
			}
		}
		return total;
	}
}

 

2 运行结果

4
2
2
[疯狂Android讲义, 轻量级Java EE企业应用实战]

 

3 代码分析

该代码完成了以下4个需求

  • 统计书名中出现“疯狂”字符串的图书数量。
  • 统计书名中出现“Java”字符串图书数量。
  • 统计书名长度大于10的图书数量。
  • 删除书名长度小于10的图书。
版权声明:本文为博主原创文章,未经博主允许不得转载。

java函数式编程之Predicate

描述:Predicate< T>接口接受一个T类型参数,返回一个boolean值。源码:public interface Predicate { boolean test(T t); }测试代...

JAVA8-Predicate函数使用

主要说明 常用方法 真实场景 主要说明Predicate 接受一个输入参数,返回一个布尔值结果。该接口包含多种默认方法来将Predicate组合成其他复杂的逻辑(比如:与,或,非)。可以用于接口请求参...

Java JVM(七):Function,Consumer,Predicate 接口

包括 Funciton,Consumer,Predicate 接口的使用。

[疯狂Java]集合:Collection的迭代器Iterator、使用Predicate筛选集合中的元素

1. Iterator——迭代器:     1) 和C++中迭代器的概念一样,二要素:          i. 迭代器必定从属于某个容器,其作用就是用来遍历所属容器中的元素的!         ...

Java 8 再不知道就老了

Java 8 特性介绍1.简介毫无疑问,Java 8是自Java 5(2004年)发布以来Java语言最大的一次版本升级,如果不学习,你会怀疑自己面前的代码是不是Java。Java 8带来了很多的新...

Apache Commons Collections基本操作(Predicate、Transformat、Closure等)

一、Predicate断言package Collections;import java.util.ArrayList; import java.util.List;import org.apache...

java8 Predicate接口API翻译

java.util.function Interface Predicate 类型参数: T -谓词的输入类型 功能接口: 这是一个功能接口,因此可以用作lambda表...

Java8 新特性之集合: removeIf(Predicate<? super E> filter)

下边是JDK1.8.0_121中接口Collection的部分源码:/** * Removes all of the elements of this collection that satisf...

Hyperledger -超级账本 学习报告

Hyperledger -超级账本 学习报告   一、什么是区块链?   区块链的基本原理,基本组件包括: 交易:对账本状态的改变; 区块:记录交易和状态,是对当前账本状态的一次确认; ...

JAVA8 使用谓词(Predicate)操作集合

Java8  为 Collection 集合新增了一个removeIf(Predicate filter )方法,该方法可以批量删除filter条件的所有元素。该方法的参数 Predicate是函数式...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用Java 8新增的Predicate操作来操作集合
举报原因:
原因补充:

(最多只允许输入30个字)