java8 新特性之stream用法

//1. 得到集合中对象的某个属性的集合
list.stream().map(CheckRecord::getId).collect(Collectors.toList());

//2. 根据groupId分组, 得到map(key: groupId, value: 对应的list集合)
Map<String, List<Student>> collectbyGroupId = 
        list.stream().collect(Collectors.groupingBy(Stutent::getGroupId));
//2.1.根据groupId分组, 得到map(key: groupId, value: 对应的对象)
list.stream().collect(Collectors.toMap(SysCompany::getName, Function.identity(), (key1 , key2) -> key2));
//2.2. 根据groupId分组
Map<Long, Student> map = list.stream().collect(Collectors.toMap(Student::getId, v -> v));

//3. 筛选得到符合条件的对象集合(这里得到的是分数>=90的学生对象集合)
List<Student> collections = 
        list.stream().filter(record -> record.getGrade() >= 90)
            .collect(Collectors.toList());

//4.得到集合中按某一属性比较的最大的对象
Student maxStudent =         
        list.stream().collect(Collectors.maxBy(Comparator.comparing(Student::getGrade)))
            .get();

//5.找到一个!=1 && !=2的返回true, 没找到返回false
Boolean hasFlag = list.stream().anyMatch(record -> record.getTemplateId()!=1 && record.getTemplateId()!=2);
//5.1 集合中所有对象的status是否都为3, 是返回true, 否则返回false
boolean flag = list.stream().allMatch(record-> record.getStatus() == 3);

//6.多条件排序(从小到大,注:需要返回结果才有用,list1和list2不是同一个集合)
List<CheckRecord> list1 = list2.stream().sorted(Comparator.comparing(CheckRecord::getResultNo)
			.thenComparing(CheckRecord::getTemplateId)
			.thenComparing(CheckRecord::getCreateTime))
		.collect(Collectors.toList());
//6.1
Collections.sort(checkRecordList, new Comparator<CheckRecord>(){
	@Override
	public int compare(CheckRecord checkRecord1, CheckRecord checkRecord2) {
		Long resultNo1 = Long.parseLong(checkRecord1.getResultNo());
		Long resultNo2 = Long.parseLong(checkRecord2.getResultNo());
		Integer templateId1 = checkRecord1.getTemplateId();
		Integer templateId2 = checkRecord2.getTemplateId();
		Date createTime1 = checkRecord1.getCreateTime();
		Date createTime2 = checkRecord2.getCreateTime();
				
		return (resultNo1 > resultNo2) ? 1 : ((resultNo1 < resultNo2) ? -1 : 
			((templateId1 > templateId2) ? 1 : ((templateId1 < templateId2) ? -1 : 
((createTime1.after(createTime2) ? 1 : ((createTime1.before(createTime2) ? -1 : 0)))))));
	}	    	
});

//7.timeStrlist (String类型) 去重后用","分隔开
String str = timeStrlist.stream().distinct().collect(Collectors.joining(","));

//字符串","隔开转List<Integer>
String ids = "1,2,3,4,5,6";
List<Long> idList = Arrays.stream(ids.split(",")).map(Long::parseLong).collect(Collectors.toList());

//list转数组
 Integer[] integers = Stream.of(1, 2, 3, 4, 5).toArray(Integer[]::new);

// 假设 list1 和 list2 中有相同数量的对象
List<Item> list1 = new ArrayList<>();
List<Item> list2 = new ArrayList<>();
// 使用 Stream 将 list2 的 ID 赋值给 list1 的 CID
List<Item> resultList = IntStream.range(0, list1.size())
                .mapToObj(i -> {
                    Item item1 = list1.get(i);
                    Item item2 = list2.get(i);
                    item1.setCid(item2.getId());
                    return item1;
                }).collect(Collectors.toList());

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值