JDK8之后集合操作新属性

1、检查list集合中是否存在某个值

一个list集合内有name,sex字段,需要判断list中是否有name有叫张三的人,如果有返回true

boolean b = list.stream().filter(m -> m.getName().equals("张三")).findAny().isPresent();
boolean b = list.stream().anyMatch(s -> s.getBuName().equals("张三33"));

2、获取不重复的list集合中的个数

//基本数据类型
List<Integer> list = Lists.newArrayList(1, 2, 1, 3);
long count = list.stream().distinct().count();
//对象
long count = list.stream().map(Student::getName).distinct().count();

3、list元素去重

//基本数据类型
List<String> newList = list.stream().distinct().collect(Collectors.toList());
//对象:根据单个元素去重
List<SkuHotNews> collect = list.stream().collect(
                Collectors.collectingAndThen(
                        Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(SkuHotNews::getBuId))), ArrayList::new));
//对象:根据两个元素去重
List<SkuHotNews> collect = list.stream().collect(
                Collectors.collectingAndThen(
                        Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(s -> s.getBuId() + ";" + s.getId()))), ArrayList::new));

4、list元素过滤

List<SkuHotNews> collect = list.stream().filter(s -> s.getBuName().equals("张三")).collect(Collectors.toList());

5、过滤list生成新的list

List<CusCommissionBo> simplePage = Lists.newArrayList();
    List<CusCommissionVo> commissionVoList = simplePage.stream()
		.filter((actCusCommissionBo) -> ActSceneEnum.SCENE_ONE.getCode().equals(actCusCommissionBo.getActType()))
		.map((actCusCommissionBo) -> {
            CusCommissionVo cusCommissionVo = new CusCommissionVo();
            return cusCommissionVo;
        }).collect(Collectors.toList());

6、分组

List<CheckGoodsMx> checkGoodsList; //不为空的数据List
//返回Map<依据实体类中某个属性分组的类型, List<实体类>>
// groupingBy(CheckGoodsMx::getDrcode)-groupingBy(实体类::getDrcode)
Map<String, List<CheckGoodsMx>> drcodeMap =checkGoodsList.stream().collect(
                Collectors.groupingBy(CheckGoodsMx::getDrcode));

7、list转map

List<Apple> appleList = new ArrayList<>();//存放apple对象集合
 
Apple apple1 =  new Apple(1,"苹果1",new BigDecimal("3.25"),10);
Apple apple12 = new Apple(1,"苹果2",new BigDecimal("1.35"),20);
Apple apple2 =  new Apple(2,"香蕉",new BigDecimal("2.89"),30);
Apple apple3 =  new Apple(3,"荔枝",new BigDecimal("9.99"),40);
 
appleList.add(apple1);
appleList.add(apple12);
appleList.add(apple2);
appleList.add(apple3);

//转map:id为key,apple对象为value
Map<Integer, Apple> appleMap = appleList.stream().collect(Collectors.toMap(Apple::getId, a -> a,(k1,k2)->k1));
//单对单
Map<Long, BigDecimal> map = list.stream().collect(Collectors.toMap(SkuHotNews::getId, SkuHotNews::getBuId, (k1, k2) -> k2));

8、求和、最大值、最小值、平均值

double、int、long是一种方式,以long举例:

//求和
long sum = list.stream().mapToLong(SkuHotNews::getId).sum();
//最大值
long max = list.stream().mapToLong(SkuHotNews::getId).max().getAsLong();
//最小值
long min = list.stream().mapToLong(SkuHotNews::getId).min().getAsLong();
//平均值(没有指定几位小数,可以转成bigdecimal处理小数位数)
double avg = list.stream().mapToLong(SkuHotNews::getId).average().getAsDouble();
//一次获得:和、最大值、最小值、平均值
IntSummaryStatistics stats = ins.stream().mapToInt((x) -> x).summaryStatistics();
System.out.println("列表中最大的数 : " + stats.getMax());
System.out.println("列表中最小的数 : " + stats.getMin());
System.out.println("所有数之和 : " + stats.getSum());
System.out.println("平均数 : " + stats.getAverage());

bigdecimal是一种方式(都没有指定小数位数,正常需要指定):

private static final DecimalFormat df = new DecimalFormat("0.00");//保留两位小数点
//求和
BigDecimal add = list.stream().map(SkuHotNews::getBuId).reduce(BigDecimal.ZERO, BigDecimal::add);
String addStr = df.format(add);//保留两位小数并转成string
//最大值
BigDecimal max = list.stream().max((u1, u2) -> u1.getBuId().compareTo(u2.getBuId())).get().getBuId();
String maxStr = df.format(max);//保留两位小数并转成string
//最小值
BigDecimal min = list.stream().min((u1, u2) -> u1.getBuId().compareTo(u2.getBuId())).get().getBuId();
String minStr = df.format(min);//保留两位小数并转成string
//平均值
BigDecimal avg = list.stream().map(SkuHotNews::getBuId).reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal(list.size()));
String avgStr = df.format(avg);//保留两位小数并转成string

9、排序

//升序
List<SkuHotNews> collect = list.stream().sorted(Comparator.comparing(SkuHotNews::getBuId)).collect(Collectors.toList());
//降序
List<SkuHotNews> collect = list.stream().sorted(Comparator.comparing(SkuHotNews::getBuId).reversed()).collect(Collectors.toList());
//多条件排序
List<SkuHotNews> collect = list.stream().sorted(Comparator.comparing(SkuHotNews::getBuId).thenComparing(SkuHotNews::getId)).collect(Collectors.toList());

10、逗号分隔

list转成逗号分隔的字符串

String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值