为什么学?
-
能够看懂公司里的代码
-
大数量下处理集合效率高,因为有并行流,而自己创建处理会有很多问题
-
代码可读性高
-
消灭嵌套地狱
本系列将从Lambda表达式、Stream流、Optional、函数式接口、方法引用等顺序开始讲解
//查询未成年作家的评分在70以上的书籍 由于洋流影响所以作家和书籍可能出现重复,需要进行去重 List<Book> bookList = new ArrayList<>(); Set<Book> uniqueBookValues = new HashSet<>(); Set<Author> uniqueAuthorValues = new HashSet<>(); for (Author author : authors) { if (uniqueAuthorValues.add(author)) { if (author.getAge() < 18) { List<Book> books = author.getBooks(); for (Book book : books) { if (book.getScore() > 70) { if (uniqueBookValues.add(book)) { bookList.add(book); } } } } } }
System.out.println(bookList);
使用Lambda后
List<Book> collect = authors.stream() .distinct() .filter(author -> author.getAge() < 18) .map(author -> author.getBooks()) .flatMap(Collection::stream) .filter(book -> book.getScore() > 70) .distinct() .collect(Collectors.toList()); System.out.println(collect);
函数式编程思想
概念
比起关注对象更关注函数
面向对象思想需要关注用什么对象完成什么事情。
而函数式编程思想就类似于我们数学中的函数。它主要关注的是对数据进行了什么操作。
优点
-
代码简洁,开发快速
-
接近自然语言,易于理解
-
易于"并发编程"