java 8 List 操作

1List<map>正序

mapDataList.stream().sorted((a, b) ->a.get("age") - b.get("age")).collect(Collectors.toList());

2 List<map>倒序

mapDataList.stream().sorted((a, b) ->b.get("age") - a.get("age")).collect(Collectors.toList());

3 list 转 Map

//转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)

4 list字段拼接

String userIds =lst.stream().map(o->o.getString("userid")).collect(Collectors.joining(","));

String userStr = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));

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

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

boolean b = list.stream().anyMatch(s -> s.getBuName().equals("张三33"));

6 获取不重复的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();

7.list元素过滤

//filter里为true的留下,false的过滤掉

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

8 分组

List<CheckGoodsMx> checkGoodsList; //不为空的数据List

//返回Map<依据实体类中某个属性分组的类型, List<实体类>>

// groupingBy(CheckGoodsMx::getDrcode)-groupingBy(实体类::getDrcode)

Map<String, List<CheckGoodsMx>> drcodeMap =checkGoodsList.stream().collect( Collectors.groupingBy(CheckGoodsMx::getDrcode));

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

//求和 

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

10 排序

//升序

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

11 数组转集合

String[] mailArray = emails.split(",");

List<String> receiveMailList = Stream.of(mailArray).collect(Collectors.toList());     

12 集合转数组

String[] strings = list.stream().toArray(String[]::new);

ListparentList =parentsSort.stream().map(o-> o.getParentId()).collect(Collectors.toList());

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容