前置对象
@Data
public class Book {
// 书名
private String name;
// 页数
private int pages;
// 作者
private String auther;
// 总字数
private int wordCounts;
// 版次日期
private Date publishDate;
}
有效的lambda表达式
// 参数类型String,返回类型int
(String s) -> s.length();
// 无返回值
(Book b) -> System.out.println(b);
// 无参数,返回Book对象
() -> {
return new Book();
};
demo
Runnable接口实现
Book book = new Book("三体", 123, "刘慈欣", 66666);
new Thread(
() -> System.out.println(book.toString())
).start();
遍历
bookList.forEach(book -> System.out.println(book));
bookList.forEach(System.out::println);
排序
List<Book> bookList = new ArrayList<>();
// 按页数排序
bookList.sort((b1, b2) -> b1.getPages() - b2.getPages());
bookList.sort(Comparator.comparing(Book::getPages));
Predicate
java.util.function.Predicate接口定义了一个名叫test的抽象方法,它接受泛型
T对象,并返回一个boolean。
// Predicate 接受T类型,返回boolean
Predicate<String> predicate = (s) -> s != null;
// 可以进行and操作,相当于 &&
predicate.and(s -> s.length() > 0);
// or 操作,相当于 ||
predicate.or(s -> s.isEmpty());
// negate 操作,相当于 !
predicate.negate();
Consumer
java.util.function.Consumer定义了一个名叫accept的抽象方法,它接受泛型T
的对象,无返回类型。
Consumer<Book> consumer = b -> {
if (b.getPages() > 100) {
System.out.println(b.getName() + " pages > 100");
}
};
bookList.forEach(consumer);
Supplier
java.util.function.Supplier定义了一个名叫get的抽象无参方法,返回T类型对象。
Supplier<Book> supplier1 = Book::new;
Supplier<Book> supplier2 = () -> new Book();
Function
java.util.function.Function<T, R>接口定义了一个叫作apply的方法,它接受一个
泛型T的对象,并返回一个泛型R的对象。
Function<Book, String> function = book -> book.getName();
BiFunction,BiPredicate,BiConsumer
与前面不同的是,函数入参为两个变量。
Int* , Double* , Long*
分别以原始类型作为入参和出参