用了Stream后,代碼反而越寫越丑?
往期熱門文章:
1、一不小心節(jié)約了 591 臺機器! 2、你見過哪些目瞪口呆的 Java 代碼技巧? 3、笑死!程序員延壽指南開源了 4、互聯(lián)網(wǎng)黑話,被上海人翻譯火了 5、還在用分頁?太Low !試試 MyBatis 流式查詢,真心爽!
合理的換行
舍得拆分函數(shù)
合理的使用 Optional
返回 Stream 還是返回 List?
少用或者不用并行流
總結(jié)
public?List ?getFeeds(Query?query,Page?page) {
????List?orgiList?=?new?ArrayList<>();
????List?collect?=?page.getRecords().stream()
????.filter(this::addDetail)
????.map(FeedItemVo::convertVo)
????.filter(vo?->?this.addOrgNames(query.getIsSlow(),orgiList,vo))
????.collect(Collectors.toList());
????//...其他邏輯
????return?collect;
}
private?boolean?addDetail(FeedItem?feed){
????vo.setItemCardConf(service.getById(feed.getId()));
????return?true;
}
private?boolean?addOrgNames(boolean?isSlow,List?orgiList,FeedItemVo?vo) {
????if(isShow?&&?vo.getOrgIds()?!=?null){
????????orgiList.add(vo.getOrgiName());
????}
????return?true;
}
if?(!CollectionUtils.isEmpty(roleNameStrList)?&&?roleNameStrList.contains(REGULATORY_ROLE))?{
????vos?=?vos.stream().filter(
???????????vo?->?!CollectionUtils.isEmpty(vo.getSpecialTaskItemVoList())
????????????????????&&?vo.getTaskName()?!=?null)
???????????.collect(Collectors.toList());
}?else?{
????vos?=?vos.stream().filter(vo?->?vo.getIsSelect()
???????????&&?vo.getTaskName()?!=?null)
???????????.collect(Collectors.toList());
????vos?=?vos.stream().filter(
????????????vo?->?!CollectionUtils.isEmpty(vo.getSpecialTaskItemVoList())
????????????????????&&?vo.getTaskName()?!=?null)
???????????.collect(Collectors.toList());
}
result.addAll(vos.stream().collect(Collectors.toList()));
合理的換行
Stream.of("i",?"am",?"xjjdog").map(toUpperCase()).map(toBase64()).collect(joining("?"));
Stream.of("i",?"am",?"xjjdog")
????.map(toUpperCase())
????.map(toBase64())
????.collect(joining("?"));
舍得拆分函數(shù)
public?Stream ?getOrderByUser(String?userId){
????return?orderRepo.findOrderByUser().stream()
????????.map(order->?{
????????????OrderDto?dto?=?new?OrderDto();
????????????dto.setOrderId(order.getOrderId());
????????????dto.setTitle(order.getTitle().split("#")[0]);
????????????dto.setCreateDate(order.getCreateDate().getTime());
????????????return?dto;
????});
}
public?Stream ?getOrderByUser(String?userId){
????return?orderRepo.findOrderByUser().stream()
????????.map(this::toOrderDto);
}
public?OrderDto?toOrderDto(Order?order){
????OrderDto?dto?=?new?OrderDto();
????????????dto.setOrderId(order.getOrderId());
????????????dto.setTitle(order.getTitle().split("#")[0]);
????????????dto.setCreateDate(order.getCreateDate().getTime());
????return?dto;
}
public?Stream ?getOrderByUser(String?userId){
????return?orderRepo.findOrderByUser().stream()
????????.map(OrderDto::new);
}
Predicate ?registarIsCorrect?=?reg?->?
????reg.getRegulationId()?!=?null?
????&&?reg.getRegulationId()?!=?0?
????&&?reg.getType()?==?0;
合理的使用 Optional
if(null?==?obj)
if(null?==?user.getName()?||?"".equals(user.getName()))
if?(order?!=?null)?{
????Logistics?logistics?=?order.getLogistics();
????if(logistics?!=?null){
????????Address?address?=?logistics.getAddress();
????????if?(address?!=?null)?{
????????????Country?country?=?address.getCountry();
????????????if?(country?!=?null)?{
????????????????Isocode?isocode?=?country.getIsocode();
????????????????if?(isocode?!=?null)?{
????????????????????return?isocode.getNumber();
????????????????}
????????????}
????????}
????}
}
?String?result?=?Optional.ofNullable(order)
??????.flatMap(order->order.getLogistics())
??????.flatMap(logistics?->?logistics.getAddress())
??????.flatMap(address?->?address.getCountry())
??????.map(country?->?country.getIsocode())
??????.orElse(Isocode.CHINA.getNumber());
public?Optional ?getUserName()? {
????return?Optional.ofNullable(userName);
}
Optional<String>?userName?=?"xjjdog";
String?defaultEmail?=?userName.get()?==?null???"":userName.get()?+?"@xjjdog.cn";
Optional<String>?userName?=?"xjjdog";
String?defaultEmail?=?userName
????.map(e?->?e?+?"@xjjdog.cn")
????.orElse("");
返回 Stream 還是返回 List?
public?Stream ?getAuthUsers() {
????...
????return?Stream.of(users);
}
少用或者不用并行流
List?transform(List?source){
?List?dst?=?new?ArrayList<>();
?if(CollectionUtils.isEmpty()){
??return?dst;
?}
?source.stream.
??.parallel()
??.map(..)
??.filter(..)
??.foreach(dst::add);
?return?dst;
}
總結(jié)
<dependency>
????<groupId>io.vavrgroupId>
????<artifactId>vavrartifactId>
????<version>0.10.3version>
dependency>
往期熱門文章:
1、笑死!程序員延壽指南開源了 2、用 Dubbo 傳輸文件?被老板一頓揍! 3、45 個 Git 經(jīng)典操作場景,專治不會合代碼! 4、@Transactional 注解失效的3種原因及解決辦法 5、小學生們在B站講算法,網(wǎng)友:我只會阿巴阿巴 6、Spring爆出比Log4j2還大的漏洞? 7、Objects.equals 有坑?。?! 8、Redis 官方可視化工具,功能真心強大! 8、xxl-job 和 ElasticJob比,誰牛? 10、推薦好用的 Spring Boot 內(nèi)置工具類
評論
圖片
表情
