开发效率慢,两个姿势提高——java提高工作效率(1)

150 阅读2分钟

1.判空

为了避免程序空指针异常,常用的判空操作:

  1. if判空:使用if语句判断对象是否为null,如果为null则执行特定的逻辑。
  2. Objects.requireNonNull()方法:该方法可以用于校验对象是否为null,如果为null则会抛出NullPointerException异常,可以结合try-catch语句进行异常处理。
  3. Apache Commons Lang库的StringUtils.isNotEmpty()方法:该方法可以判断字符串是否为空或null,如果为空或null则返回false,否则返回true。
  4. Google Guava库的Preconditions.checkNotNull()方法:该方法可以用于校验对象是否为null,如果为null则会抛出NullPointerException异常,可以提供错误信息,方便调试。

高级程序员用的判空方式:Optional

举例说明:

    public String nullTest1(String s){
        if (s == null){
            return "1";
        }
        else return s;
    }

    public String nullTest2(String s){
        return Optional.ofNullable(s).orElse("2");
    }

一样的逻辑,使用Optional是不是既简单又高效?

Optional的使用简单介绍:

1.明确表示是否为null:使用Optional可以明确表示一个对象是否为null。例如:
Optional<String> optional = Optional.ofNullable(str);
if (optional.isPresent()) {
    String s = optional.get();
    // ...
}


2.简化了判空逻辑:使用Optional可以简化代码中的判空逻辑。例如:
Optional optional = Optional.ofNullable(str);
optional.ifPresent(s -> {
    // ...
});


3.避免空指针异常:使用Optional可以有效地避免空指针异常。例如:
Optional optional = Optional.ofNullable(str);
String s = optional.orElse("default");



4.支持函数式编程:Optional是一种函数式编程风格的数据类型,可以支持函数式编程的一些特性,例如map、filter和reduce等操作。例如:
List list = Arrays.asList("apple", null, "orange", "banana", null);
List result = list.stream()
                         .filter(Optional::ofNullable)
                         .map(Optional::get)
                         .collect(Collectors.toList());

2.Predicate接口

    public void streamTest1(){
        List<String> list = Arrays.asList("apple", "orange", "banana", "pear", "watermelon");
        Predicate<String> predicate = new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.length()>5;
            }
        };
        List<String> result = list.stream()
                .filter(predicate)
                .collect(Collectors.toList());
        System.out.println(result);
    }

通过predicate定义一个过滤逻辑,使用stream进行过滤

3.lambda函数式编程

Lambda表达式是函数式编程的一种具体实现方式,它可以用来简化函数式编程中的代码书写,但是Lambda表达式并不等同于函数式编程。

函数式编程是一种编程范式,它将计算视为数学上的函数计算,强调函数之间的组合和应用,而不是指令的执行。函数式编程中的函数是一等公民,即函数可以像变量一样传递、作为参数传入另一个函数、作为返回值返回。

Lambda表达式则是Java中实现函数式编程的一种方式,它可以将一个函数作为参数传递给另一个函数,也可以将一个函数作为返回值返回。

上述代码可以用以下lambda进行表示:

    public void streamTest2(){
        List<String> list = Arrays.asList("apple", "orange", "banana", "pear", "watermelon");
        Predicate<String> predicate = (s)->s.length()<5;
        List<String> result = list.stream()
                .filter(predicate)
                .collect(Collectors.toList());
        System.out.println(result);
    }

甚至可以写成这样

    public void streamTest3(){
        List<String> list = Arrays.asList("apple", "orange", "banana", "pear", "watermelon");
        List<String> result = list.stream()
                .filter((s)->s.length()<5)
                .collect(Collectors.toList());
        System.out.println(result);
    }

想要知道具体的lambda表达式请在评论叫我。