lamdar
1. 集合封装为Map
先理解一下参数
(1) key为 属性, value 为对象本身
Map<String, ActExtNodeInfo> nodeMap = modelService.getNodeInfoByModel(modelData)
.stream()
.collect(Collectors.toMap(ActExtNodeInfo::getNodeId, e -> e,(e1, e2) -> e1));
Map<String, DetailPlanDs> dsmap = planDs.stream().collect(Collectors.toMap(DetailPlanDs::getId, ds -> ds));
(2) key为 属性, value 为属性
Map<String, String> collect = columnInfoByClass.stream().collect(Collectors.toMap(SmrwDatasourceTableItem::getFieldName, SmrwDatasourceTableItem::getDataType));
备注 :部分方法上面的写法不适用一些场景,比较而言,下面的写法更宽泛一点
(3) key为属性 ,value为属性, 如果存在相同key, 采用前面的值
Collectors.toMap(FormConfigDetail::getColumnCode, FormConfigDetail::getColumnDataType, (k1, k2) -> k1)
2. 集合封装为另一个List(其中的一个属性组成)
(1) 去重,且将其中的一个属性组装成一个新的集合
List<CashEntity> cashEntityList = cashService.findListByFundBatchNo(billNos);
List<String> billNoList = cashEntityList.stream().map(CashEntity::getBillNo).distinct().collect(Collectors.toList());
(2)加上大括号后,就需要return了
3. allMatch的匹配方法
备注: 当这个 xjPayedDetailList 为空集合, 恒为true 所以在执行此方法之前,需要进行非空判断
Boolean allMatch = xjPayedDetailList.stream().allMatch(s -> XjSmsbmEnum.PayState.PAYSUCCESS.getCode().equals(s.getDataState()) ||
XjSmsbmEnum.PayState.PAYFAIlURE.getCode().equals(s.getDataState()));
4. 拼接字符串,逗号拼接
String errInsuranceCodes = errData.stream().map(d -> (String)d.get("INSURANCECODE")).collect(Collectors.joining(","));
5. 累加
list.stream().map(FiscalDetailItem::getApplyAmount).reduce(BigDecimal::add).get();
6.过滤,符合条件的留下来
同样也是 :: 和 -> 区别
List<aa> s = planRules.stream().filter(DetailPlanRule::getIsMoney).collect(Collectors.toList());
List<SfcColumn> ccCols = columns.stream().filter(c -> ColumnPropertyEnum.collectCredit.equals(c.getColumnProperty())).collect(Collectors.toList());
7.排序,根据某个字段排序
Map<String, List<String>> result = list.stream().collect(Collectors.groupingBy(A::getField(), Collectors.mapping(XjFamilyPay::getId, Collectors.toList())));
list.stream().sorted(Comparator.comparing(DetailPlanRule::getSort))
8. 排序
Map<String, List<XjSmsbmSummaryDetail>> collect = xjSmsbmSummaryDetailList.stream()
.filter(s -> recDetailBankTransitList.contains(s.getRecBankType()))
.collect(Collectors.groupingBy(XjSmsbmSummaryDetail::getRecBankType));