Java8的stream用法整理
- map
1 直接获取对象的值
this.categoryMapper.selectByIdList(ids).stream().map(Category::getName).collect(Collectors.toList()); 2 游标循环处理
pageInfo.getResult().stream().map(spu -> {
// 2、把spu变为 spuBo
SpuBo spuBo = new SpuBo();
// 属性拷贝
BeanUtils.copyProperties(spu, spuBo); // 3、查询spu的商品分类名称,要查三级分类
List<String> names = this.categoryService.queryNameByIds(Arrays.asList(spu.getCid1(), spu.getCid2(), spu.getCid3()));
// 将分类名称拼接后存入
spuBo.setCname(StringUtils.join(names, "/")); // 4、查询spu的品牌名称
Brand brand = this.brandMapper.selectByPrimaryKey(spu.getBrandId());
spuBo.setBname(brand.getName());
return spuBo;
}).collect(Collectors.toList());
- collect
/**
* @author index
* @date 2020/10/27
**/
public class TestcollectingAndThen {
@Test
public void test(){
final int NUM = 14;
List<People> peopleList = new ArrayList<>(NUM);
String[] names = {"小张", "小龙", "小牛", "小猪", "小黑", "小红", "小白"};
for (int i = 0; i < 5; i++) {
//添加5个19岁的随机性别和名字的小朋友
peopleList.add(new People(19, (int) (Math.random() * 2), names[(int) (Math.random() * names.length)]));
}
for (int i = 5; i < 8; i++) {
//添加3个31岁的随机性别和名字的小朋友
peopleList.add(new People(31, (int) (Math.random() * 2), names[(int) (Math.random() * names.length)]));
}
for (int i = 8; i < NUM; i++) {
//添加6个22岁的随机性别和名字的小朋友
peopleList.add(new People(22, (int) (Math.random() * 2), names[(int) (Math.random() * names.length)]));
} //collectingAndThen先对stream里的元素进行collecting,之后再对结果进行操作,
// 下面的结果是一个map,对map计算元素数目
System.out.println("分组数目:");
Integer groupCount = peopleList.stream().collect(
Collectors.collectingAndThen(Collectors.groupingBy(People::getName), Map::size));
System.out.println(groupCount);
System.out.println("-------------------------------------"); //按照名字分组
System.out.println("按照名字分组");
System.out.println(
peopleList.stream().collect(Collectors.groupingBy(People::getName))
);
System.out.println("-------------------------------------"); //按照名字分组(分组的结果是一个map),并统计每一个分组(map中的每一个value)中的元素数目
System.out.println("统计每一个分组(map中的每一个value)中的元素数目");
System.out.println(
peopleList.stream().collect(Collectors.groupingBy(People::getName, Collectors.counting()))
);
System.out.println("-------------------------------------"); //按照名字分组(分组的结果是一个map),并取出每一组的最大值
System.out.println("取出每一组的最大值");
System.out.println(
peopleList.stream().collect(Collectors.groupingBy(People::getName, Collectors.maxBy(new Comparator<People>() {
@Override
public int compare(People o1, People o2) {
return o1.getAge() - o2.getAge();
}
})))
); }
}
List<Integer> collectList = Stream.of(1, 2, 3, 4)
.collect(Collectors.toList());
System.out.println("collectList: " + collectList);
// 打印结果
// collectList: [1, 2, 3, 4]
Set<Integer> collectSet = Stream.of(2, 3, 3, 3)
.collect(Collectors.toSet());
System.out.println("collectSet: " + collectSet);
// 打印结果
// collectSet: [2,3]
private void loadStockInSku(List<Long> ids, List<Sku> skus) {
List<Stock> stockList = stockMapper.selectByIdList(ids);
if (CollectionUtils.isEmpty(stockList)) {
throw new LyException(ExceptionEnum.GOODS_STOCK_NOT_FOUND);
}
Map<Long, Integer> stockMap = stockList.stream().collect(Collectors.toMap(Stock::getSkuId, Stock::getStock));
skus.forEach(s -> s.setStock(stockMap.get(s.getId())));
}
Java8的stream用法整理的更多相关文章
- Java8 新特性学习 Lambda表达式 和 Stream 用法案例
Java8 新特性学习 Lambda表达式 和 Stream 用法案例 学习参考文章: https://www.cnblogs.com/coprince/p/8692972.html 1.使用lamb ...
- Google Guava 库用法整理<转>
参考: http://codemunchies.com/2009/10/beautiful-code-with-google-collections-guava-and-static-imports- ...
- Spring JdbcTemplate用法整理
Spring JdbcTemplate用法整理: xml: <?xml version="1.0" encoding="UTF-8"?> <b ...
- linq用法整理
linq用法整理 普通查询 var highScores = from student in students where student.ExamScores[exam] > score se ...
- linux学习:特殊符号,数学运算,图像与数组与部分终端命令用法整理
指令:let.expr.array.convert.tput.date.read.md5.ln.apt.系统信息 一:特殊符号用法整理 系统变量 $# 是传给脚本的参数个数 $0 是脚本本身的名字 $ ...
- #ifndef#define#endif的用法(整理)
[转] #ifndef#define#endif的用法(整理) 原作者:icwk 文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都in ...
- MySQL中使用SHOW PROFILE命令分析性能的用法整理(配合explain效果更好,可以作为优化周期性检查)
这篇文章主要介绍了MySQL中使用show profile命令分析性能的用法整理,show profiles是数据库性能优化的常用命令,需要的朋友可以参考下 show profile是由Jerem ...
- Android spannableStringBuilder用法整理
Android spannableStringBuilder用法整理 分类: Android开发2013-11-29 10:58 5009人阅读 评论(0) 收藏 举报 Androidspannabl ...
- OBJECTPROPERTY用法整理
OBJECTPROPERTY用法整理 分类: 系统表与表结构 数据库管理维护2010-06-03 16:37 2783人阅读 评论(1) 收藏 举报 数据库sql serverinsertobject ...
随机推荐
- .net core Winform 添加DI和读取配置、添加log
首先新建配置类 public class CaptureOption { /// <summary> /// 是否自启 /// </summary> public bool A ...
- 2019"深思杯"山东省大学生网络安全技能大赛部分wp
签到 载入OD查看字符串 上下左右 这道题出来的时候真的是一点思路都没有,一直以为是什么编码来着,看了大佬们的 wp 原来是画图 拿大佬的脚本: from PIL import Image im = ...
- 可视报表(Project)
<Project2016 企业项目管理实践>张会斌 董方好 编著 原来一直有一个执念,做项目的人电脑上一定要安装Project软件,今天突然知道了,原来领导的电脑上,可以不装,因为,Pro ...
- 在【自定义列】中使用M函数(Power Query 之 M 语言)
数据源: "品名"一列 目标: 提取品名中的首字符,生成新列:"品名简称" 解决方案: 在[自定义列]中使用M函数Text.Start 步骤: 打开[自定义列] ...
- 尚硅谷SSM-CRUD实战Demo
SSM-CRUD实战项目 1. 项目总览 SpringMVC + Spring + MyBatis CRUD:增删改查 功能: 分页 数据校验 jquery前端校验+JSR303后端校验 ajax R ...
- CF1082A Vasya and Book 题解
Content 给定 \(T\) 组数据,每组数据给出四个整数 \(n,x,y,d\).小 V 有一本 \(n\) 页的书,每次可以恰好翻 \(d\) 页,求从第 \(x\) 页恰好翻到第 \(y\) ...
- 洛谷八月月赛 II T2 题解
Content 现有 \(T\) 次询问. 每次询问给定一个长度为 \(n\) 的 01 串,记为 \(A\).回答应是一个字符串 \(B\),满足: \(B\) 是长度为 \(m\) 的 01 串. ...
- TFTP协议介绍-python实现tftp客户端
1. TFTP协议介绍 TFTP(Trivial File Transfer Protocol,简单文件传输协议) 是TCP/IP协议族中的一个用来在客户端与服务器之间进行简单文件传输的协议 特点: ...
- mvn 把本地jar包打包到本地仓库中
命令如下: mvn install:install-file -Dfile=apache-ant-zip-2.3.jar -DgroupId=com.ckfinder -DartifactId=apa ...
- 在程序出现问题,当找不到错误时,第一时间用try ,catch包括起来
在程序出现问题,当找不到错误时,第一时间用try ,catch包括起来,把错误找到.