Stream.distinct() Stream流去重
Stream.map() 用于遍历集合的方法,在遍历的过程中可以对集合中的每个元素进行操作
Function.identity() 获取一个直接返回入参的函数
list.stream().sorted(Comparator.comparing(类::属性一));) stream排序 对象集合以类属性一升序排序
LocalDate.parse(String str) 字符串转换为LocalDate类型
Collectors.groupingBy 根据字段分组,返回Map集合
@JsonProperty 是把该属性的名称序列化为另外一个名称
@JsonFormat(pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
storeCodeLow.toUpperCase 全部变成大写
netstat -ano | findstr 7080
taskkill /f /pid 12852
Collections.disjoint 比较两个集合中有没有相同的元素 当两个集合中没有相同元素时返回true,当有相同元素时返回false。
Comparator.comparing 进行排序 reversed()进行倒序排列 thenComparing进行下一个排序。 Comparator.nullsFirst 当集合中存在null元素时,可以使用针对null友好的比较器,null元素排在集合的最前面
peek
peek的设计初衷就是在流的每个元素恢复运行之前的时候插入一个执行操作. 它不想forEach那样恢复整个流的运行操作. 而是在一个元素上完成操作之后, 它只会将操作顺承到流水线的下一个操作. 它能够将中间变量的值输出到日志. 有效的帮助我们了解流水线的每一步操作的输出值
allMatch
查看该流中的所有值是否「都」满足执行的条件
anyMatch()
在流中「至少有一个元素」匹配执行的条件
noneMatch()。检查是否没有匹配元素
flatMap用法
list1 + list2 =list3 list3输出为[[1,3],[2,4]] 使用flatMap 将集合平铺,list3输出为[1,3,2,4]
假设有这样的需求,有一个[[1,3],[2,4]]的二维数组,我们要得到一个一维数组[1,3,2,4]。那么这里的flatMap就正好排上用场,原来是二维的,现在压平为一维,正好分解了。
Collectors.toMap
假如id存在重复值,则会报错Duplicate key xxx, 解决方案是:
只取后一个key及value:
Map<String, Student> map = list.stream().collect(Collectors.toMap(Student::getId,Function.identity(),(oldValue,newValue) -> newValue))
Optional.ofNullable()
优雅的非空判断
接下来看看最常用的.isPresent()方法和.orElse()方法源码
//orElse
public T orElse(T other) {
return value != null ? value : other;
}
//isPresent
public boolean isPresent() {
return value != null;
}
Map修改Value的多种方法
一、使用put()方法 可以直接修改Map中已有key对应的value值
二、使用replace()方法 可以直接替换Map中已有key对应的value值 map.replace("A", 3);
三、使用compute()方法 可以根据key和value计算出一个新的value值,并且更新到Map中。 map.compute("A", (k, v) -> v + 1);
四、使用merge()方法 可以将指定key的value值与传入的value执行指定的计算,并将计算结果作为新的value更新到Map中。 map.merge("A", 1, (oldVal, newVal) -> oldVal + newVal); 如果key不存在,则新增一个键值对
//按照出现的次数分组
stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
stream对集合进行分页
可以通过组合使用skip()和limit()进行分页,如下面代码:
int pageSize = 10;
int pageIndex = 7;
List<Integer> expected = asList(61, 62, 63, 64, 65, 66, 67, 68, 69, 70);
List<Integer> result = Stream.iterate(1, i -> i + 1)
.skip((pageIndex - 1) * pageSize)
.limit(pageSize)
.collect(Collectors.toList());
assertEquals(expected, result);
集合内容,平铺,数据使用“,”进行连接
joining连接流中指定的元素
没有参数,直接进行连接
有参数,则对元素中间进行连接
三个参数,则对元素中间和首尾进行连接
String collect = emps.stream().map(Employee::getName)
.collect(Collectors.joining(",","[","]"));
System.out.println(collect);
[李四,张三,赵六,赵六,王五,田七]
任务执行完后先执行A 操作,再执行B操作
collectingAndThen(A,B)表示在执行完A以后再执行B
// 原物料对应的货品数量
Map<String, List<String>> materCount = materialInfoList.stream()
.filter(relation -> Objects.nonNull(relation.getMaterialCode()))
.collect(Collectors.groupingBy(MerchandiseMaterialRelation::getMaterialCode,
Collectors.groupingBy指定value的内容 Collectors.mapping(MerchandiseMaterialRelation::getJdeCode,Collectors.toList())));
Map<String, Map<String, BigDecimal>> wddSaleMap = wddMerchandiseSales.stream()
.collect(Collectors.groupingBy(WddMerchandiseSale::getMerchandiseCode,
Collectors.toMap(WddMerchandiseSale::getBusinessDate,
item -> new BigDecimal(item.getQuantity()), BigDecimal::add
)));
Collections.singletonList 节省内存空间,新建集合
两个集合取交集
CollectionUtil.intersection(list1, list2)
list1.retainAll(list2)
System.out.println("交集:" + list1);
//排序,使用Collections.sort工具排序
Collections.sort(lessHistogramDetailList, new Comparator<LessHistogramDetailVO>() {
@Override
public int compare(LessHistogramDetailVO o1, LessHistogramDetailVO o2) {
return new BigDecimal(o1.getForecastInventory()).abs().compareTo(new BigDecimal(o2.getForecastInventory()).abs());
}
});
//Map object转换成对象
Map<Object, Object> map = redisOperator.hGetAll(orderMerchandiseKey);
if (map != null) {
map.forEach((k, v) -> {
OrderMerchandiseTotal orderMerchandise = JsonUtil.convertValue(v, OrderMerchandiseTotal.class);
08-19