近日看书,流风格让我眼前一亮,回想去年的code,以后这样做是不是像换了新衣,但人还是那个人。
或许只有夜深人静,思考的冰封才能融化成细流,流淌涓涓。不卖弄文采了,进入正题!
举个例子:假定在图书馆中,有n列书架,现在要找出其中作者名字大于两个字数的书名。我们的第一反映大多是几组嵌套的循环,代码如下
public Set<String> findLongBook(List<Shelf> shelfs) { Set<String> bookNames = new HashSet<>(); for (Shelf shelf : shelfs) { for (Book book : shelf.getBooks()) { if (book.getAuthorLength() > 2) { String bookName = book.getBookName(); bookNames.add(bookName); } } } return bookNames; }
很难一眼看出它要干啥,最终通过几次的流的重构,会变成如下
public Set<String> findLongBook(List<Shelf> shelfs) { return shelfs.stream() .flatMap(shelf -> shelf.getBooks()) .filter(book -> book.getAuthorLength() > 2) .map(book -> book.getBookName()) .collect(toSet()); }
是不是看着清爽很多,觉得不错分享下。中间的一些详细流变换后续会完善,该睡了。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于