代码案例
这里只适合快速上手,深入学习请搜索!
List
1、List<String>
List<String> nickUserIds = userPages.getData().stream().map(UserModel::getUserId).collect(Collectors.toList());
2、List<String> 获取集合中所有对象集合中的某一个参数
List<String> goodsList = pagedList.getData().stream().flatMap(payOrderModel -> payOrderModel.getItems().stream()).map(PayOrderItemModel::getBusinessCode).collect(Collectors.toList());
Map
3、Map<String,String>
Map<String, String> userMap = userModels.stream().collect(Collectors.toMap(UserModel::getUserId, UserModel::getNick));
4、Map<String,Object>
merchantModelList.stream().collect(Collectors.toMap(MerchantModel::getMerchantId, Function.identity()));// 同上 lambda表达式替换Function.identity():
merchantModelList.stream().collect(Collectors.toMap(MerchantModel::getMerchantId, merchant -> merchant));//使用Function.identity()或lambda表达式merchant -> merchant的效果与使用方法引用Function.identity()::apply相同,都是返回Map中的元素本身。
5、Map<String, List<Object>>
userCategoryModels.stream().collect(Collectors.groupingBy(UserCategoryModel::getBusinessId))
6、Map 中的value处理空值
Map<String, String> productAttributeModelMap = productAttributeModelMap = productAttributeModels.stream().collect(Collectors.toMap(pa -> pa.getProductId() + pa.getAttributeType(), pa -> pa.getMediaUrl() != null ? pa.getMediaUrl() : ""));
7、Map单条件分组
Map<String, List<DataSourceSummaryModel>> groupedByPmIdMap = dataSourceSummaryModels.stream().collect(Collectors.groupingBy(DataSourceSummaryModel::getPurchaseMerchantId));
8、Map两个条件分组(保证key唯一)
Map<String, List<DataSourceSummaryModel>> gs = twoDaysAgoSources.stream().collect(Collectors.groupingBy(model ->model.getPurchaseMerchantId() + "-" + model.getCategoryCode()));
9、Map 多参数key
Map<String, String> merchantCategoryModelMap = merchantCategoryModelList.stream().collect(Collectors.toMap(m -> m.getCategoryCode() + m.getPieceWeight() + m.getGrade() + m.getOriginPlace(), MerchantCategoryModel::getBusinessCode));
10、Map集合嵌套
Map<String, List<Map<String, DataSourceSummaryModel>>> baba = twoDaysAgoSources.stream().collect(Collectors.groupingBy(DataSourceSummaryModel::getPurchaseMerchantId,Collectors.mapping(model -> {Map<String, DataSourceSummaryModel> innerMap = new HashMap<>();innerMap.put(model.getCategoryCode(), model);return innerMap;},Collectors.toList())));
11、Map拼接Key
Map<String, Long> sda = twoDaysAgoSources.stream().collect(Collectors.toMap(item ->item.getPurchaseMerchantId() + item.getCategoryCode(), DataSourceSummaryModel::getAwardeePrice));
12. Map的value为空的空处理
// 这里没有处理,所以会报错
categoryPicMap = categoryModels.stream().collect(Collectors.toMap(CategoryModel::getName, CategoryModel::getPic));
// 这里使用了过滤器,先过滤
categoryPicMap = categoryModels.stream().filter(categoryModel -> categoryModel.getPic() != null).collect(Collectors.toMap(CategoryModel::getName, CategoryModel::getPic)); // 这里使用了 直接操作,减少了过滤器开销
categoryPicMap = categoryModels.stream().collect(Collectors.toMap(CategoryModel::getName, model -> model.getPic() == null ? "" : model.getPic()));
13、处理重复键
if (CollectionUtil.isNotEmpty(productAttributeModels)){Map<String, String> productFirstPicMap = productAttributeModels.stream().filter(attr -> attr.getMediaUrl() != null && !attr.getMediaUrl().isEmpty()) // 过滤掉图为空的情况.collect(Collectors.toMap(ProductAttributeModel::getProductId, // 键:商品IDProductAttributeModel::getMediaUrl, // 值:图(existing, replacement) -> existing // 处理重复键:保留第一个出现的值));
}
14、Map:保留第一个值 or 保留最后一个值
Map<String, Integer> quantityMap = request.getOrderOwners().stream().flatMap(orderOwner -> orderOwner.getOrderProducts().stream()).collect(Collectors.toMap(SOrderCreateRequest.OrderOwner.OrderProduct::getProductId, SOrderCreateRequest.OrderOwner.OrderProduct::getNumber,(existingValue, newValue) -> existingValue // 保留第一个值));Map<String, Integer> quantityMap = request.getOrderOwners().stream().flatMap(orderOwner -> orderOwner.getOrderProducts().stream()).collect(Collectors.toMap(SOrderCreateRequest.OrderOwner.OrderProduct::getProductId, SOrderCreateRequest.OrderOwner.OrderProduct::getNumber,(existingValue, newValue) -> newValue // 保留最后一个值));
Set
15、Set<String>
因为Set集合是无序且不允许重复的集合类型,所以在收集的过程中,重复的tPurchaseUserId属性值只会被保留一次。可以直接去重
Set<String> tPurchaseUserIds = paged.getData().stream().map(QuoteOrderModel::getTPurchaseUserId).collect(Collectors.toSet());
16、Set<String>取list对象中list对象的值
代码使用了flatMap操作将goodsOrder.getItemModels()的流扁平化,然后使用map操作将每个GoodsOrderItemModel对象映射为其categoryName属性值。最后,通过forEach将每个categoryName添加到categoryNameSet集合中。
这样,你可以通过代码来遍历pagedList.getData()的集合元素,并将每个goodsOrder对象中的GoodsOrderItemModel的categoryName属性添加到categoryNameSet集合中。
Set<String> categoryNameSet = new HashSet<>();
pagedList.getData().stream().flatMap(goodsOrder -> goodsOrder.getItemModels().stream()).map(GoodsOrderItemModel::getCategoryName).forEach(categoryNameSet::add);
17、根据条件取List对象中list对象的值存入Set<String>
Set<Integer> productInventoryIds = billOrderModelPage.getData().stream().filter(b -> Objects.equals(b.getBillType(), BillTypeEnum.PROPRIETARY_INVENTORY.getIndex())) // 过滤符合条件的 BillOrderModel.flatMap(b -> b.getItems().stream()) // 对符合条件的 BillOrderModel 进行扁平化处理.map(billOrderItem -> Integer.parseInt(billOrderItem.getProductId())) // 提取并转换 productId.collect(Collectors.toSet()); // 收集到 Set 中Set<String> productIds = billOrderModelPage.getData().stream().filter(b -> Objects.equals(b.getBillType(), BillTypeEnum.SELL_PRODUCT.getIndex())) // 过滤符合条件的 BillOrderModel.flatMap(b -> b.getItems().stream()) // 对符合条件的 BillOrderModel 进行扁平化处理.map(BillOrderItemModel::getProductId) // 提取 productId.collect(Collectors.toSet()); // 收集到 Set 中
18、set校验数据是否存在
// 使用Set校验
Set<String> stringSet = itemModelList.stream().map(PurchaseOrderItemModel::getCategoryCode).collect(Collectors.toSet());// 要校验的categoryCode
String categoryCodeToCheck = "your_category_code_here";// 检查categoryCode是否存在于Set中
boolean exists = stringSet.contains(categoryCodeToCheck);// 打印结果
System.out.println("Category code exists: " + exists);
19、Set<String> 取List对象中的两个参数
Set<String> userIdSet = pagedList.getData().stream().flatMap(orderModel -> Stream.of(orderModel.getReceiverUserId(), orderModel.getPayUserId())).collect(Collectors.toSet());
20、一个Set集合中,存两个List集合筛选出的数据
Set<String> userIdSet = new HashSet<>();
quoteOrderItemModels.stream().map(QuoteOrderItemModel::getSalerUserId).forEach(userIdSet::add);
quoteOrderModels.stream().map(QuoteOrderModel::getPurchaseUserId).forEach(userIdSet::add);Set<String> userIdSet = orderModels.stream().flatMap(o -> Stream.of(o.getPurchaseUserId(), o.getOwnerUserId())).filter(Objects::nonNull) // 确保不添加null值.collect(Collectors.toSet());