Java(八):Stream流式操作-创新互联
介绍
新闻名称:Java(八):Stream流式操作-创新互联
转载源于:http://azwzsj.com/article/pohji.html
Java8对集合操作功能的增强,专注于对集合的各种高效、便利、优雅的聚合操作。记录一下Stream流的一些用法。
创新互联建站主要从事网站建设、成都网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务海门,十载网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220获取list某个字段组装新List
ListuserIdList = userList.stream().map(e ->e.getUserId()).collect(Collectors.toList());
根据指定字段分组
Map>mapByName = list.stream().collect(Collectors.groupingBy(User::getName));
去重
ListnumList = Lists.newArrayList(1, 5, 3, 3, 6);
numList = numList.stream().distinct().collect(Collectors.toList());
// 根据指定字段去重
list = list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() ->new TreeSet<>(Comparator.comparing(User::getId))), ArrayList::new));
条件过滤
// 只要包含有“张三”的数据
list = list.stream().filter(e ->e.getName().equals("张三")).collect(Collectors.toList());
求和
// 基本类型
int sumAge = userList.stream().mapToInt(User::getAge).sum();
// 其他 -- 若bigDecimal对象为null,可filter()过滤掉空指针
BigDecimal totalMemberNum = userList.stream().map(User::getMemberNum).reduce(BigDecimal.ZERO, BigDecimal::add);
大值/最小值
Date minDate = userList.stream().map(User::getCreateTime).min(Date::compareTo).get();
Date maxDate = userList.stream().map(User::getCreateTime).max(Date::compareTo).get();
User maxUp = userList.stream().max(Comparator.comparingInt(User::getAge)).get();
差值(新增/删除)
ListuserIdListNew = Lists.newArrayList(1, 2, 3, 5, 6);
ListuserIdListOld = Lists.newArrayList(1, 2, 3, 4);
// 删除人员 [4]
ListremoveUserIdList = userIdListOld.stream().filter(userIdOld ->!userIdListNew.contains(userIdOld)).collect(Collectors.toList());
// 新增人员 [5, 6]
ListaddUserIdList = userIdListNew.stream().filter(userIdNew ->!userIdListOld.contains(userIdNew)).collect(Collectors.toList());
分类统计数量
// 多字段统计 -- ex: 统计相同name下相同age的个数
Map>map = list.stream().collect(
Collectors.groupingBy(User::getName, Collectors.groupingBy(User::getAge, Collectors.counting()))
);
// 单字段统计 [LongSummaryStatistics中包含总数、最小值、大值、平均值等信息] -- ex: 根据名称去统计
Mapmap = list.stream()
.collect(
Collectors.groupingBy(User::getName, Collectors.summarizingLong(User::getAge))
);
求list重复元素值
@Test
public void test02() throws Exception {
Listlist = Lists.newArrayList(1, 2, 3, 4, 5, 6, 1, 6, 6);
ListrepeatDataList = list.stream()
.collect(Collectors.toMap(e ->e, e ->1, Integer::sum))
.entrySet().stream()
.filter(entry ->entry.getValue() >1)
.map(Map.Entry::getKey)
.collect(Collectors.toList());
System.out.println(repeatDataList); // [1, 6]
// 求list对象中某一个字段的重复值
ListrepeatValueDataList = dictList
.stream().map(e ->e.getValue()).collect(Collectors.toList())
.stream().collect(Collectors.toMap(e ->e, e ->1, Integer::sum))
.entrySet().stream()
.filter(entry ->entry.getValue() >1)
.map(Map.Entry::getKey)
.collect(Collectors.toList());
}
publicListgetRepeatDataList(Listlist) {
return list.stream()
// 获得元素出现频率的 Map,键为元素,值为元素出现的次数
.collect(Collectors.toMap(e ->e, e ->1, Integer::sum))
// Set转换为Stream.entrySet().stream()
// 过滤出元素出现次数大于 1 的 entry
.filter(entry ->entry.getValue() >1)
// 获得 entry 的键(重复元素)对应的 Stream
.map(Entry::getKey)
// 转化为 List
.collect(Collectors.toList());
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
新闻名称:Java(八):Stream流式操作-创新互联
转载源于:http://azwzsj.com/article/pohji.html