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));

 

posted @ 2021-06-10 16:15  java_小跟班  阅读(184)  评论(0编辑  收藏  举报