java list.find_java~lambda表达式让查询更优雅

在java之前的版本里,如果希望从集合时查找符合条件的数据,如果先遍历他,这种写法是我们不能接受的,所以现在java有了lambda就很好的解决了这个问题,让代码更优雅一些!

Predicate

/*** lambda filter.

*@paramlist

*@parampredicate

*@return

*/

public List conditionFilter(List list, Predicatepredicate){returnlist.stream().filter(predicate).collect(Collectors.toList());

}

上面的方法里有个predicate委托,他类似C++里的函数指针,和C#里的委托类似,他允许外面将一个表达式传进来,与现有代码很好的结偶了!

/*** find list.*/

public voidfindList() {

List list = new ArrayList<>();

list.add(new User("zzl"));

list.add(new User("abc"));

list.add(new User("bca"));

list= conditionFilter(list, exe -> exe.getName() == "zzl");for(User user : list

) {

System.out.println(user.getName());

}

}

上面代码在集合里查找了名字为zzl的记录!

下面让委托实现了不等于的查找!

/*** lambda filter not.

*

*@paramsubjects

*@parampredicate

*@return

*/

private List conditionFilterNot(List subjects, Predicatepredicate) {returnsubjects.stream().filter(predicate.negate()).collect(Collectors.toList());

}

事实上,java里的Predicate接口还有很多用法,想and,or也有支持!

Consumer

consumer允许外界传入一个有参数但没有返回值的方法原型,这在C#里类似于Action委托,在java里就是函数式接口的一个特例,人家java为咱们封装了一下,开发人员可以直接用这个函数式

接口了,它的原码如下:

@FunctionalInterfacepublic interface Consumer{voidaccept(T t);default Consumer andThen(Consumer super T>after) {

Objects.requireNonNull(after);return (T t) ->{ accept(t); after.accept(t); };

}

}

我们在平时使用时,比如可以写个日志方法,而日志通过哪种方式持久化我们可能不确定,这时就可以使用Consumer来实现

private void logger(Consumeraction, String msg) {

action.accept(msg);

}

@Testpublic voidlambda() {

logger(i-> System.out.println(i), "hello");

}

在调用传入打印方法时,就把日志打到控制台上,而如果调用方将Slf4j的日志方法传入时,就以这种方法写日志。

@Testpublic voidlambdaLog() {

logger(i-> logger.info(i), "hello");

}

参考资料:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值