最近在业务代码中写了一些没用过的lambda表达式,今天放出来一个例子:看一下我用的那个lambda?
stream.collect() <R> R collect(Supplier<R> supplier,BiConsumer<R, ? super T> accumulator,BiConsumer<R, R> combiner);
官方解释!->
个人大白话解释!->
第一个匿名函数用来创建一个最终的容器
第二个函数用来创建一个容器和stream流的每一项进行处理,放入这个容器里
第三个函数用来将,每一个容器全部装到一个容器里
上业务代码{
//权限页面LIst List<AppDirectoryPageVo> appDirectoryPageVos = new ArrayList<>(); if (Objects.nonNull(one) && StringUtils.isNotEmpty(one.getAppDirectory())) { //使用lambda表达式 <R> R collect(Supplier<R> supplier,BiConsumer<R, ? super T> accumulator,BiConsumer<R, R> combiner); 生成应用页面目录list appDirectoryPageVos.addAll( Arrays.stream(one.getAppDirectory().split(",")).collect( //生成一个容器 new Supplier<List<AppDirectoryPageVo>>() { @Override public List<AppDirectoryPageVo> get() { return new ArrayList<>(); } }, //将每一个目录VO装入单独List对象 new BiConsumer<List<AppDirectoryPageVo>, String>() { @Override public void accept(List<AppDirectoryPageVo> appDirectoryPageVoList, String appDirectory) { AppDirectoryPageVo json = new AppDirectoryPageVo(); json.setDirectory(appDirectory); appDirectoryPageVoList.add(json); } }, //将每一个容器和到一个容器 new BiConsumer<List<AppDirectoryPageVo>, List<AppDirectoryPageVo>>() { @Override public void accept(List<AppDirectoryPageVo> appDirectoryPageVoList, List<AppDirectoryPageVo> appDirectoryPageVoList2) { appDirectoryPageVoList.addAll(appDirectoryPageVoList2); } }) ); }
}
这个是我第一次写出来的代码,又臭又长,但是加上我的注释,就能理解了,再看一下我配合IDEA提示优化的代码,我其实不太喜欢,可读性太低了
//权限页面LIst List<AppDirectoryPageVo> appDirectoryPageVos = new ArrayList<>(); if (Objects.nonNull(one) && StringUtils.isNotEmpty(one.getAppDirectory())) { //使用lambda表达式 <R> R collect(Supplier<R> supplier,BiConsumer<R, ? super T> accumulator,BiConsumer<R, R> combiner); 生成应用页面目录list appDirectoryPageVos.addAll( Arrays.stream(one.getAppDirectory().split(",")).collect( //生成一个容器 (Supplier<List<AppDirectoryPageVo>>) ArrayList::new, //将每一个目录VO装入单独List对象 (appDirectoryPageVoList, appDirectory) -> { AppDirectoryPageVo json = new AppDirectoryPageVo(); json.setDirectory(appDirectory); appDirectoryPageVoList.add(json); }, //将每一个容器和到一个容器 List::addAll) ); }
这里就介绍完了我的使用过程,你还有那些不懂嫩?
再来一些教程把,有的是沾别人的,其实你们按我的第一个例子,又臭又长的又有注释的去用,稍微改改自己的业务
解读: