使用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); }测试代...
  • z345434645
  • z345434645
  • 2016年12月14日 23:49
  • 4847

JAVA8-Predicate函数使用

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

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

Java 8为Collection集合新增了一些需要Predicate参数的方法,这些方法可以对集合元素进行过滤。程序可使用Lambda表达式构建Predicate对象。 1 代码示例 impor...
  • chengqiuming
  • chengqiuming
  • 2017年04月12日 09:43
  • 6343

java8 Predicate接口API翻译

java.util.function Interface Predicate 类型参数: T -谓词的输入类型 功能接口: 这是一个功能接口,因此可以用作lambda表...
  • anonymousProgrammer
  • anonymousProgrammer
  • 2017年07月24日 18:33
  • 423

使用Java8新增的Predicate操作集合

使用Java8新增的Predicate操作集合: java8为Collection集合新增了一个removeIf(Predicate filter) 方法,该方法将会批量删除符合filter条件的...
  • zlz18225318697
  • zlz18225318697
  • 2016年09月20日 18:13
  • 2570

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

包括 Funciton,Consumer,Predicate 接口的使用。
  • u014077165
  • u014077165
  • 2015年09月09日 12:07
  • 6523

【Java8】Guava——Predicate

PredicateGuava@FunctionalInterface @GwtCompatible public interface Predicate extends java.util.funct...
  • qq_20597479
  • qq_20597479
  • 2017年04月10日 17:35
  • 352

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

1. Iterator——迭代器:     1) 和C++中迭代器的概念一样,二要素:          i. 迭代器必定从属于某个容器,其作用就是用来遍历所属容器中的元素的!         ...
  • Lirx_Tech
  • Lirx_Tech
  • 2016年05月23日 21:36
  • 4121

【java】【java8】Lambda、Stream、Function、Consumer、Predicate、Supplier

Function源代码 package java.util.function; import java.util.Objects; /** * Represents a function tha...
  • lzm18064126848
  • lzm18064126848
  • 2017年04月16日 23:58
  • 1852

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

下边是JDK1.8.0_121中接口Collection的部分源码:/** * Removes all of the elements of this collection that satisf...
  • HelloMrZheng
  • HelloMrZheng
  • 2017年04月12日 22:21
  • 5336
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用Java 8新增的Predicate操作来操作集合
举报原因:
原因补充:

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