一、Lambda
1. 基本使用
package com.nike.erick.d01;
public class Demo05 {
public static void main(String[] args) {
ErickInter inter = (fo, age) -> {
System.out.println("food is:" + fo);
};
inter.eat("peach", 1);
}
}
@FunctionalInterface
interface ErickInter {
void eat(String food, int age);
}
三、Optional
- Optional就是一个包装类,可以将具体的数据封装在Optional中
- 然后可以利用Optional 提供的api来进行调用
优点:
1. 解决代码冗余
2. 可以和java8特性中的链式编程结合
1. 传统写法
@Test
public void first() {
Student student = getStudent();
if (student != null) {
if (student.getHobbies() != null) {
System.out.println("爱好数量为:" + student.getHobbies().size());
} else {
System.out.println("hobby为空");
}
} else {
System.out.println("student为空");
}
}
private Student getStudent() {
return null;
}
2. 创建对象
Optional是一个工具类
public static <T> Optional<T> ofNullable(T value)
public static <T> Optional<T> of(T value)
public static<T> Optional<T> empty()
package com.erick;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.junit.Test;
import java.util.List;
import java.util.Optional;
import java.util.function.Consumer;
public class Test01 {
@Test
public void test01() {
Optional<Student> studentOptional = getStudent01();
studentOptional.ifPresent(new Consumer<Student>() {
@Override
public void accept(Student student) {
System.out.println(student.getName());
}
});
}
@Test
public void second02() {
Optional<Student> studentOptional = getStudent01();
studentOptional.ifPresent(student -> System.out.println(student.getName()));
}
private Optional<Student> getStudent01() {
Optional<Student> student = Optional.ofNullable(new Student("erick", 10, "xian", null));
return student;
}
@Test
public void test02() {
Optional<Student> student02 = getStudent02();
}
private Optional<Student> getStudent02() {
Optional<Student> student = Optional.of(new Student("erick", 10, "xian", null));
return student;
}
@Test
public void test03() {
getStudent03();
}
private Optional<Student> getStudent03() {
Student student = null;
return student == null ? Optional.empty() : Optional.of(student);
}
}
@Data
@AllArgsConstructor
class Student {
private String name;
private int age;
private String address;
private List<String> hobbies;
}
3. 消费数据
public void ifPresent(Consumer<? super T> action)
public T get()
public T orElseGet(Supplier<? extends T> supplier)
public T orElse(T other)
public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X
public T orElseThrow()
package com.erick;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.junit.Test;
import java.util.List;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Supplier;
public class Test01 {
@Test
public void test01() {
Optional<Student> studentOptional = getStudent();
studentOptional.ifPresent(new Consumer<Student>() {
@Override
public void accept(Student student) {
System.out.println(student.getName());
}
});
}
@Test
public void test02() {
Optional<Student> studentOptional = getStudent();
Student student = studentOptional.get();
System.out.println(student);
}
@Test
public void test03() {
Optional<Student> studentOptional = getStudent();
Student student = studentOptional.orElseGet(new Supplier<Student>() {
@Override
public Student get() {
return new Student("mock", 10, "mock", null);
}
});
System.out.println(student);
}
@Test
public void test04() {
Optional<Student> studentOptional = getStudent();
Student student = studentOptional.orElse(new Student("mock", 11, "mock", null));
System.out.println(student);
}
@Test
public void test05() {
Optional<Student> studentOptional = getStudent();
try {
Student student = studentOptional.orElseThrow(new Supplier<Throwable>() {
@Override
public Throwable get() {
return new RuntimeException("ERICK-NULL");
}
});
System.out.println(student);
} catch (Throwable e) {
System.out.println("传入的值是空");
e.printStackTrace();
}
}
@Test
public void test06() {
Optional<Student> studentOptional = getStudent();
Student student = studentOptional.orElseThrow();
System.out.println(student);
}
private Optional<Student> getStudent() {
Student student = null;
return student == null ? Optional.empty() : Optional.of(student);
}
}
@Data
@AllArgsConstructor
class Student {
private String name;
private int age;
private String address;
private List<String> hobbies;
}
4. 过滤数据
package com.erick;
import org.junit.Test;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Predicate;
public class Test02 {
@Test
public void test01() {
Optional<Student> studentOptional = getStudent();
studentOptional.filter(new Predicate<Student>() {
@Override
public boolean test(Student student) {
return student.getAge() >= 100;
}
}).ifPresent(new Consumer<Student>() {
@Override
public void accept(Student student) {
System.out.println(student.getName());
System.out.println(student.getAge());
}
});
}
@Test
public void test02() {
Optional<Student> studentOptional = getStudent();
studentOptional.filter(student -> student.getAge() >= 100).ifPresent(student -> {
System.out.println(student.getName());
System.out.println(student.getAge());
});
}
private Optional<Student> getStudent() {
Student student = new Student("erick", 100, "xian", null);
return student == null ? Optional.empty() : Optional.of(student);
}
}
5. map获取
package com.erick;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Function;
public class Test02 {
@Test
public void test01() {
Optional<Student> studentOptional = getStudent();
studentOptional.map(new Function<Student, List<String>>() {
@Override
public List<String> apply(Student student) {
return student.getHobbies();
}
}).ifPresent(new Consumer<List<String>>() {
@Override
public void accept(List<String> list) {
System.out.println(list.size());
}
});
}
@Test
public void test02() {
Optional<Student> studentOptional = getStudent();
studentOptional.map(student -> student.getHobbies()).ifPresent(list -> System.out.println(list.size()));
}
private Optional<Student> getStudent() {
List<String> hobbies = new ArrayList<>();
hobbies.add("swim");
hobbies.add("sing");
Student student = new Student("erick", 100, "xian", hobbies);
return student == null ? Optional.empty() : Optional.of(student);
}
}