java stream的使用

stream的常用用法

1.排序

//list 根据对象属性排序
List<Clue> clueList = clueList.stream().sorted(new Comparator<Clue>() {
				@Override
				public int compare(LzdaClue o1, LzdaClue o2) {
					Date d1 = DateUtils.parseDateFormat(o1.getSlsj());
					Date d2 = DateUtils.parseDateFormat(o2.getSlsj());
					//正序
					//return d1.compareTo(d2);
					//倒序
					return d2.compareTo(d1);
				}
			}).collect(Collectors.toList());

// 按照 list 里的 id 来排序 targetList
public void setListOrder(List<Long> list, List<AppManage> targetList) {
		Collections.sort(targetList, ((o1, o2) -> {
			int io1 = list.indexOf(o1.getId());
			int io2 = list.indexOf(o2.getId());

			if (io1 != -1) {
				io1 = targetList.size() - io1;
			}
			if (io2 != -1) {
				io2 = targetList.size() - io2;
			}

			return io2 - io1;
		}));
	}

2.去重

//list 根据对象属性去重
List<Object> newList = new ArrayList<>();
List<Object> caseList= new ArrayList<>();
caseList.stream().filter((c)->c.getJasj()!=null&&!"".equals(c.getJasj()))
					.filter(distinctByKey(c -> c.getCardNo())) //filter保留true的值
					.forEach(newList::add);
					
private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
		Map<Object,Boolean> seen = new ConcurrentHashMap<>();
		//putIfAbsent方法添加键值对,如果map集合中没有该key对应的值,则直接添加,并返回null,如果已经存在对应的值,则依旧为原来的值。
		//如果返回null表示添加数据成功(不重复),不重复(null==null :TRUE)
		return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
	}


//list 根据对象多个属性去重
List<Object> list = oneList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(one -> one.getName1() + ";" + one.getName2() + ";" + one.getName3()))), ArrayList::new));

3.过滤

//根据对象年龄(时间)属性过滤 
List<PersonalBasic> nl20and30 = basicList.stream().filter((b) ->
				DateUtils.parseDateFormat(b.getBirthday(), DateUtils.dayDateFormat2).before(DateUtils.decreaseYear(date, 20))
					&& DateUtils.parseDateFormat(b.getBirthday(), DateUtils.dayDateFormat2).after(DateUtils.decreaseYear(date, 30)))
				.collect(Collectors.toList());
List<PersonalBasic> nl31and40 = basicList.stream().filter((b) ->
				DateUtils.parseDateFormat(b.getBirthday(), DateUtils.dayDateFormat2).before(DateUtils.decreaseYear(date, 31))
					&& DateUtils.parseDateFormat(b.getBirthday(), DateUtils.dayDateFormat2).after(DateUtils.decreaseYear(date, 40)))
				.collect(Collectors.toList());
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值