java 函数式编程 - 判断集合中是否存在满足某个条件的元素

2010 - 08 - 15

java 函数式编程

  • 博客分类:
  • java
首先得承认这篇文章有点标题党的味道,哈哈,到java6为止,java是不支持函数式编程的。前几天在使用apache commons collections的时候偶然发现CollectionUtils.exist方法,该方法用于判断集合中是否存在满足某个条件的元素,具体使用如下:

Java代码 复制代码 收藏代码
  1. @Test 
  2.     public void test_functional_programming(){ 
  3.         String[] langs = {"java", "python", "c"}; 
  4.  
  5.         assertTrue( 
  6.             CollectionUtils.exists(Arrays.asList(langs), new Predicate() { 
  7.                 public boolean evaluate(Object object) { 
  8.                     return "java".equals((String)object); 
  9.                 } 
  10.             }) 
  11.         ); 
  12.     } 
@Test
    public void test_functional_programming(){
		String[] langs = {"java", "python", "c"};

		assertTrue(
			CollectionUtils.exists(Arrays.asList(langs), new Predicate() {
				public boolean evaluate(Object object) {
					return "java".equals((String)object);
				}
			})
		);
    }


exists的第一个参数为接口Collection,第二个参数为接口Predicate,用来表示判断是否存在的条件,上例在调用的时候新建了一个匿名类。也正是匿名类的存在让整个代码显得繁琐不直观,说真的还不如自己动手写一个exists方法:

Java代码 复制代码 收藏代码
  1. private boolean existsJava(Collection<String> langs){ 
  2.         for (String lang : langs){ 
  3.             if ("java".equals(lang))return true
  4.         } 
  5.         return false
  6.     } 
private boolean existsJava(Collection<String> langs){
		for (String lang : langs){
			if ("java".equals(lang)) return true;
		}
		return false;
	}


今年oracle在openjdk项目发布了 java lambda的草案,如果将来commons collections也推出一个lambda版本,那么对exists的调用会变成:

Java代码 复制代码 收藏代码
  1. CollectionUtils.exists(Arrays.asList(langs), #(String lang)("java".equals(lang))) 
CollectionUtils.exists(Arrays.asList(langs), #(String lang)("java".equals(lang)))


尽管还不算完美,但至少比目前的exists方法调用简洁多了。CollectionUtils里面还存在collect, find, filter, select等函数式编程常用的方法,有兴趣的朋友可以看看。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值