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

时间:2021-10-05 20:29:20

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

  /**
   * lambda filter.
   * @param list
   * @param predicate
   * @return
   */
  public List<User> conditionFilter(List<User> list, Predicate<User> predicate){
    return list.stream().filter(predicate).collect(Collectors.toList());
  }

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

 /**
   * find list.
   */
  public void findList() {
    List<User> 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.
   *
   * @param subjects
   * @param predicate
   * @return
   */
  private List<User> conditionFilterNot(List<User> subjects, Predicate<User> predicate) {

    return subjects.stream().filter(predicate.negate()).collect(Collectors.toList());
  }

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

参考资料:

http://ifeve.com/predicate-and-consumer-interface-in-java-util-function-package-in-java-8/

https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html