优先考虑自定义排序
https://blog.csdn.net/apsilk/article/details/90700985
https://blog.csdn.net/alan_liuyue/article/details/110185139
https://blog.csdn.net/qq_48721706/article/details/122510280
List<User> collect = users.stream()
.sorted(Comparator.comparing(User::getAge,(s1,s2) -> {return s2.compareTo(s1);}))
.collect(Collectors.toList());
List<User> collect1 = users.stream()
.sorted(Comparator.comparing(User::getAge).reversed())
.collect(Collectors.toList());
List<User> collect1 = users.stream()
.sorted( Comparator.comparing(ColumnOfHistogramInfo3::getValue)
.reversed()
.thenComparing(ColumnOfHistogramInfo3::getName) )
//进行排序,如果num为null则排在最后,不会抛出空指针异常
public static void main(String[] args) {
ArrayList<SysMenu> sysMenus = new ArrayList<>();
SysMenu sysMenu0 = new SysMenu();
sysMenu0.setId("5");
sysMenu0.setNum(5);
SysMenu sysMenu = new SysMenu();
sysMenu.setId("1");
sysMenu.setNum(1);
SysMenu sysMenu2 = new SysMenu();
sysMenu2.setId("2");
sysMenus.add(sysMenu0);
sysMenus.add(sysMenu);
sysMenus.add(sysMenu2);
List<SysMenu> collect = sysMenus.stream()
.sorted(Comparator.comparing(SysMenu::getNum, Comparator.nullsLast(Integer::compareTo)))
.collect(Collectors.toList());
collect.stream().forEach(e -> System.out.println(JSON.toJSONString(e)));
}
分组
//根据资方ID进行分组
Map<String, List<TOmsBiPjBase>> collect = bases.stream()
.collect(Collectors.groupingBy(TOmsBiPjBase::getCapitalId));
求和
//当日在贷金额总和
BigDecimal reduce = tOmsBiPjBases.stream().map(TOmsBiPjBase::getLoanAmount)
.reduce(BigDecimal.ZERO, BigDecimal::add);
根据日期分组 并对日期进行排序
Map<String, List<TOmsBiCapitalLoan>> collect = tOmsBiCapitalLoans.stream()
.collect(Collectors.groupingBy(TOmsBiCapitalLoan::getBatchNo,TreeMap::new,Collectors.toList()));
分组后对key进行排序
collect.keySet().stream().sorted()
求和并筛选不为null的对象
BigDecimal receiveAmtTotal = tBiLoanGatherMons.stream().map(y -> y.getReceiveAmt())
.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
stream配合Optional
Map<String, List<TOmsBiConfPara>> biConfParaMap = Optional.ofNullable(biConfParaList).orElse(new ArrayList<>())
.stream().collect(Collectors.groupingBy(TOmsBiConfPara::getTypeCode));
求和添加判断条件
BigDecimal onWayServCostAmtSum = onWayServCostList.stream().map(ServiceCostVo::getServiceAmount)
.filter(bd->null!=bd).reduce((bd1, bd2) -> bd1.add(bd2)).orElse(BigDecimal.ZERO);
将nulls始终放在最后
order by outtable.payServiceDt desc nulls last
--nulls始终放在最前
nulls first
去重
List<DataRes> results =
resultList.stream()
.collect(
Collectors.collectingAndThen(
Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(o -> o.getCompName() + ";" + o.getBusiness()))
), ArrayList::new));
2次分组
stream().collect(Collectors
.groupingBy(ApplyInvoiceRespVo::getRzId, Collectors.groupingBy(ApplyInvoiceRespVo::getCostType)));
sort排序
CACHE_MAP = YwManager.getBeanMap().entrySet().stream()
.sorted(Comparator.comparing(e -> e.getKey().code))
.collect(LinkedHashMap::new, (map, entry) -> map.put(entry.getKey(), entry.getValue()), Map::putAll);
.collect(Collectors.toMap ( ) );
Map<String, BaseArea> baseAreaMap = this.baseAreaService
.findBaseAreaList(baseAreaCon).stream()
.collect(Collectors.toMap(BaseArea::getZoneCode, a -> a, (k1, k2) -> k1));
第一个参数BaseArea::getZoneCode表示选择BaseArea的getZoneCode作为map的key值;
第二个参数a -> a表示选择将原来的对象作为map的value值;
第三个参数(k1, k2) -> k1中,如果k1与k2的key值相同,选择k1作为那个key所对应的value值
Comparator排序
List<EarlyWarnResultTypeEnum> sortResultTypeEnumList = resultTypeEnumList.stream()
.sorted( Comparator.comparingInt( e -> Integer.valueOf(e.getCode()) ) )
.collect(Collectors.toList());
获取最小值
//四个额度取一个最小的
List<BigDecimal> ls = new ArrayList<>();
ls.add(ccbYdLimit.getPlatLimit());
ls.add(ccbYdLimit.getCompLimit());
ls.add(ccbYdLimit.getCoreLimit());
ls.add(finalAvailableLimit);
finalAvailableLimit = ls.stream().min(BigDecimal::compareTo).orElse(BigDecimal.ZERO);;
将list转化为string并且中间添加,号
StringBuilder stringBuilder = new StringBuilder();
ArrayList<String> strings = new ArrayList<>();
strings.add("存在");
strings.add("卑诗欣");
strings.add("不敌");
for (String string : strings) {
stringBuilder.append(string+",");
}
stringBuilder.deleteCharAt(stringBuilder.length()-1);
System.out.println(stringBuilder.toString());
String collect = strings.stream().collect(Collectors.joining(","));
System.out.println(collect);
List转Map
ArrayList<TOmsReturnCode> compBelongRespVos = new ArrayList<>();
TOmsReturnCode code1 = new TOmsReturnCode();
code1.setCaptialCode("1");
code1.setCaptialName("张三");
TOmsReturnCode code2 = new TOmsReturnCode();
code2.setCaptialCode("2");
code2.setCaptialName("李四");
TOmsReturnCode code3 = new TOmsReturnCode();
code3.setCaptialCode("3");
code3.setCaptialName("王五");
compBelongRespVos.add(code1);
compBelongRespVos.add(code2);
compBelongRespVos.add(code3);
Map<String, String> collect = compBelongRespVos.stream().collect(Collectors.toMap(TOmsReturnCode::getCaptialCode, TOmsReturnCode::getCaptialName));
System.out.println(collect);
System.out.println(collect.get("1"));
System.out.println(collect.get("2"));
System.out.println(collect.get("3"));
.stream().noneMatch
boolean anyMatch(Predicate<? super T> predicate)
只要有一个条件满足即返回true
boolean allMatch(Predicate<? super T> predicate)
必须全部都满足才会返回true
boolean noneMatch(Predicate<? super T> predicate)
全都不满足才会返回true