当前位置: 首页 > wzjs >正文

懂得做网站还可以做什么兼职兰州网络推广电话

懂得做网站还可以做什么兼职,兰州网络推广电话,做企业网站收费,wordpress教育汉化主题Java从JDK8起提供了Stream流这个功能&#xff0c;于是项目里出现了大量基于Stream流的写法。随着项目的进行&#xff0c;慢慢的代码中铺天盖地的都是下面的写法&#xff1a; List<User> userList null;if (condition) {userList new ArrayList<>();userList.add(…

Java从JDK8起提供了Stream流这个功能,于是项目里出现了大量基于Stream流的写法。随着项目的进行,慢慢的代码中铺天盖地的都是下面的写法:

 List<User> userList = null;if (condition) {userList = new ArrayList<>();userList.add(User.builder().id(1L).name("张三").age(25).build());userList.add(User.builder().id(2L).name("李四").age(30).build());userList.add(User.builder().id(3L).name("王五").age(40).build());}...省略了的业务逻辑...List<User> users = userList.stream().filter(it-> it.getAge() > 28).collect(Collectors.toList());System.out.println(users);

上面的代码中,构建了一个包含3个User对象的List,然后取出了其中age大于28的User对象构成了新的List。相信如果在日常工作和学习中写过了大量的类似的代码,很容易能看出问题来,userList会出现为空的情况,这时候是很容易触发空指针异常的。所以我们在使用stream前通常都是需要做非空判断的。于是,优化后的代码出现了:

List<User> userList = null;
if (condition) {userList = new ArrayList<>();userList.add(User.builder().id(1L).name("张三").age(25).build());userList.add(User.builder().id(2L).name("李四").age(30).build());userList.add(User.builder().id(3L).name("王五").age(40).build());
}...省略了的业务逻辑...
if (userList != null) {List<User> users = userList.stream().filter(it-> it.getAge() > 28).collect(Collectors.toList());System.out.println(users);
}

更近一步,还可以这样写:

List<User> userList = null;
if (condition) {userList = new ArrayList<>();userList.add(User.builder().id(1L).name("张三").age(25).build());userList.add(User.builder().id(2L).name("李四").age(30).build());userList.add(User.builder().id(3L).name("王五").age(40).build());
}...省略了的业务逻辑...
List<User> users = Optional.of(userList).orElse(List.of()).stream().filter(it-> it.getAge() > 28).collect(Collectors.toList());
System.out.println(users);

到了这里,这已经是一段比较常规的业务代码了,但是它真的很丑有没有。作为一个业务研发人员,我为什么要考虑这么多呢?我不需要关注List是怎么转换成stream的,同样的,我也不关心为什么在使用完stream以后还要collect。于是,我将上面的流式代码封装成了工具类,上面的代码可以简化为:

List<User> userList = null;
if (condition) {userList = new ArrayList<>();userList.add(User.builder().id(1L).name("张三").age(25).build());userList.add(User.builder().id(2L).name("李四").age(30).build());userList.add(User.builder().id(3L).name("王五").age(40).build());
}...省略了的业务逻辑...
List<User> users = Streams.filter(userList, it-> it.getAge() > 28);
System.out.println(users);

同样的,也支持其他操作:

//返回年龄大于28的用户列表
List<User> filterUsers = Streams.filter(userList, it -> it.getAge() > 28);//返回年龄大于28的用户的姓名列表
List<String> filterNames = Streams.toList(userList, it -> it.getAge() > 28, User::getName);//返回年龄大于28的用户的姓名作为key, 年龄只作为value的map
Map<String, Integer> filterNameAndAgeMap = Streams.toMap(userList, it -> it.getAge() > 28, User::getName, User::getAge);//返回所有用户的姓名列表
List<String> allUserNames = Streams.toList(userList, User::getName);//返回所有用户的姓名作为key, 用户信息只作为value的map
Map<String, User> allUserMap = Streams.mappingToMap(userList, User::getName);//返回所有用户的姓名作为key, 年龄作为value的map
Map<String, Integer> nameAndAgeMap = Streams.toMap(userList, User::getName, User::getAge);//返回年龄大于28的第一个用户, 如果找不到则使用默认值
User user = Streams.findFirstOrElse(userList, it-> it.getAge() > 28, new User());//返回年龄大于28的第一个用户, 如果找不到则抛出异常
User user2 = Streams.findFirstOrThrow(userList, it-> it.getAge() > 28, "未找到符合条件的数据");

最后附上工具类源码供各位取用:

package com.zlyx.common.util;import java.util.*;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;public class Streams {public static <T> List<T> filter(List<T> dataList, Predicate<T> filter) {return Optional.of(dataList).orElse(List.of()).stream().filter(filter).collect(Collectors.toList());}public static <T> Set<T> filter(Set<T> dataList, Predicate<T> filter) {return Optional.of(dataList).orElse(Set.of()).stream().filter(filter).collect(Collectors.toSet());}public static <T> T findFirstOrThrow(List<T> dataList) throws Exception {return findFirstOrThrow(dataList, "未找到符合条件的数据");}public static <T> T findFirstOrThrow(List<T> dataList, String errorMsg) throws Exception {return findFirstOrThrow(dataList, Objects::nonNull, errorMsg);}public static <T> T findFirstOrThrow(List<T> dataList, Predicate<T> filter, String errorMsg) throws Exception {return Optional.of(dataList).orElse(List.of()).stream().filter(filter).findFirst().orElseThrow(() -> new Exception(errorMsg));}public static <T> T findFirstOrElse(List<T> dataList, T defaultValue) {return findFirstOrElse(dataList, Objects::nonNull, defaultValue);}public static <T> T findFirstOrElse(List<T> dataList, Predicate<T> filter, T defaultValue) {return Optional.of(dataList).orElse(List.of()).stream().filter(filter).findFirst().orElse(defaultValue);}public static <T, R> R findAnyOrNull(List<T> dataList, Function<T, R> mapper) {return Optional.of(dataList).orElse(List.of()).stream().map(mapper).filter(Objects::nonNull).findAny().orElse(null);}public static <T, R> R findAnyOrThrow(List<T> dataList, Function<T, R> mapper, String errorMsg) throws Exception {return Optional.of(dataList).orElse(List.of()).stream().map(mapper).filter(Objects::nonNull).findAny().orElseThrow(() -> new Exception(errorMsg));}public static <T, R> Set<R> toSet(List<T> dataList, Function<T, R> mapper) {return toSet(dataList, Objects::nonNull, mapper);}public static <T, R> Set<R> toSet(List<T> dataList, Predicate<T> filter, Function<T, R> mapper) {return Optional.of(dataList).orElse(List.of()).stream().filter(filter).map(mapper).collect(Collectors.toSet());}public static <T, R> List<R> toList(List<T> dataList, Function<T, R> mapper) {return toList(dataList, Objects::nonNull, mapper);}public static <T, R> List<R> toList(List<T> dataList, Predicate<T> filter, Function<T, R> mapper) {return Optional.of(dataList).orElse(List.of()).stream().filter(filter).map(mapper).distinct().collect(Collectors.toList());}public static <T, K> Map<K, T> mappingToMap(List<T> dataList, Function<T, K> keyMapper) {return mappingToMap(dataList, Objects::nonNull, keyMapper);}public static <T, K> Map<K, T> mappingToMap(List<T> dataList, Predicate<T> filter, Function<T, K> keyMapper) {return Optional.of(dataList).orElse(List.of()).stream().filter(filter).collect(Collectors.toMap(keyMapper, it -> it, (v1, v2) -> v2));}public static <T, K, V> Map<K, V> toMap(List<T> dataList, Function<T, K> keyMapper, Function<T, V> valueMapper) {return toMap(dataList, Objects::nonNull, keyMapper, valueMapper);}public static <T, K, V> Map<K, V> toMap(List<T> dataList, Predicate<T> filter, Function<T, K> keyMapper, Function<T, V> valueMapper) {return Optional.of(dataList).orElse(List.of()).stream().filter(filter).collect(Collectors.toMap(keyMapper, valueMapper));}
}
http://www.dtcms.com/wzjs/475421.html

相关文章:

  • 做淘宝客网站域名是别人的电子商务专业就业方向
  • 鞍山网站建设联系方式百度网盘下载慢
  • 广州市疫情最新消息网站seo综合诊断
  • 税务编码 做网站选什么唐山seo快速排名
  • 网站目录访问百度搜索量最大的关键词
  • 石家庄网站建设推广公司电话软文营销的成功案例
  • 网站建设方案推荐十大基本营销方式
  • 安陆市建设局网站怎么自己做网站推广
  • 做网络课堂的平台有哪些网站宁波seo教程
  • 西安专业做网站建跨境电商seo是什么意思
  • 如何做网站公众号推广谷歌浏览器下载安装
  • iis7网站建设上海广告公司排名
  • wordpress家居主题seo诊断工具有哪些
  • 网站建设合作协议模板微信软文范例大全100
  • 婚介网站建设青岛网站建设公司
  • cad协同设计平台网站seo诊断技巧
  • 企业宣传网站设计论文厦门seo代运营
  • 如何用cms做网站石家庄最新消息今天
  • 一流的嘉兴网站建设网站优化排名软件网站
  • 专做polo衫的网站北京网站seo
  • cnzz 网站域名怎么填百度云搜索资源入口
  • ps软件下载电脑版免费怎么下载搜索引擎优化指的是
  • 做动态网站怎样配置iis广告联盟自动挂机赚钱
  • 女性网站流量排名网站备案查询工信部
  • 网站建设与数据库管理推广竞价的公司有哪些
  • 创建网站的步骤是seo是什么意思广东话
  • 哪些网站可以接任务做兼职元搜索引擎有哪些
  • 网站测试速度很慢独立站seo搜索优化
  • 企业网站备案 过户网络营销项目策划方案
  • 贵州企业品牌网站建设网络营销方案的范文