Stream流及Lambda表达式
- 先创建一些测试用的数据,添加一个实体类bean
- 把list里每一个对象的ProductQuantity取出来放到新的list中
- 用stream遍历list集合中的所有数据
- 过滤集合中需要的元素
- 将list转换成map集合
- Lambda表达式的写法
先创建一些测试用的数据,添加一个实体类bean
本文用OrderDetail 创建一个实体类 属性分别是productId和 productQuantity
List<OrderDetail> orderDetailList = new ArrayList<OrderDetail>();
OrderDetail orderDetail = new OrderDetail();
orderDetail.setProductId("a");
orderDetail.setProductQuantity("张三");
OrderDetail orderDetail2 = new OrderDetail();
orderDetail2.setProductId("a1");
orderDetail2.setProductQuantity("李四");
OrderDetail orderDetail3 = new OrderDetail();
orderDetail3.setProductId("a2");
orderDetail3.setProductQuantity("赵六");
orderDetailList.add(orderDetail);
orderDetailList.add(orderDetail2);
orderDetailList.add(orderDetail3);
把list里每一个对象的ProductQuantity取出来放到新的list中
//.map 修改stream流中的数据类型
//.collect 把当前流转换成一个集合; 例Collectors.toList() 把当前list集合转换成list集合
//Collectors.toMap 吧list集合转换成map集合
List<String> productIdList = orderDetailList.stream()
.map(OrderDetail::getProductQuantity)
.collect(Collectors.toList());
System.out.println(productIdList);
//输出结果 [张三, 李四, 赵六]
用stream遍历list集合中的所有数据
orderDetailList.stream().forEach(orderDetail5 -> {
System.out.println(orderDetail5);
});
//输出结果
/*OrderDetail{productId='a', productQuantity='张三'}
OrderDetail{productId='a1', productQuantity='李四'}
OrderDetail{productId='a2', productQuantity='赵六'}*/
以上代码等同于
for (OrderDetail orderDetail5 : orderDetailList) {
System.out.println(orderDetail5);
}
过滤集合中需要的元素
List<OrderDetail> filterList = orderDetailList.stream().filter(filter -> {
return filter.getProductQuantity().equals("张三");
}).collect(Collectors.toList())
//输出结果 [OrderDetail{productId='a', productQuantity='张三'}]
将list转换成map集合
Map<String, String> collect = orderDetailList.stream().collect(Collectors.toMap(OrderDetail::getProductId, OrderDetail::getProductQuantity));
//输出结果:{a1=李四, a2=赵六, a=张三}
Lambda表达式的写法
Map<String, String> collect1 = orderDetailList.stream().collect(Collectors.toMap(a -> a.getProductQuantity(), b -> b.getProductId()));
//输出结果 :{李四=a1, 张三=a, 赵六=a2}