jdk8函数式编程等特性代码示例

//初始化List数据同上

常用的函数式接口有
Comparator<T>   做比较,以接口为返回值
private static Comparator<String> method() {

		return (o1, o2) -> {
			return o2.length() - o1.length();
		};
	}
---------------------------------------------------------------
Supplier<T>    生产型函数
private static Integer getmax(Supplier<Integer> i) {
		return i.get();
	}

---------------------------------------------------------------
Consumer<T>    数据处理无返回值接口
private static void method(String[] name, Consumer<String> con1, Consumer<String> con2) {
		for (String string : name) {
			con1.andThen(con2).accept(string);
		}
	}
----------------------------------------------------------------
Predicate<T> 判断接口
private static List filter(List<AgeData> list,Predicate<AgeData> predicate){
		List<AgeData> newList=new ArrayList<AgeData>();
		for (AgeData object : list) {
			if(predicate.test(object)) {
				newList.add(object);
			}
		}
		return newList;
	}
-----------------------------------------------------------------
Function<R,T>   数据处理且有返回值接口
private static Integer method(String num, Function<String, Integer> function) {
	return function.apply(num);
}
创建流+延迟方法
// 去重,需要重写equals方法
.parallelStream().distinct()
// 取list中对象的某一字段值
.stream().map(Student::getName)
// 类似于where
.stream().filter(entity -> entity.getQuotationStatus() > 0)
// 类似于 skip和limit正好相反,skip是取第几个之后的数据,limit是取第几个之前的数据
.stream().skip(2)
.stream().limit(2)
// 正排序
.sorted()
// 倒序
.sorted((o2,o1)->{return o1.compareTo(o2);});
// 最大值
.stream().max(Integer::compare).get();
// 最小值
.stream().min(Integer::compare).get();
// 判断所有元素是否符合某一规则
.stream().allMatch(e->e>0);
// 判断是否至少有一项符合规则
.stream().anyMatch(e->e>77);
// {}中写方法体
.stream().forEach(entity -> {    });
// list取值,映射方法
.stream().map()
.stream().map(e->Optional.ofNullable(e).map(Question::getQuestionText).orElse("是空")).collect(Collectors.toSet());
// 削平 (list中的每一个值的某个字段,处理后变成同一维度list)
flatMap(e -> Arrays.stream(e.split(",")))
终结方法
.collect(Collectors.toList());
.count()
// 分组
.collect(Collectors.groupingBy(TMpMachinePlcType::getEquipmentKey))
// 分区
.collect(Collectors.groupingByConcurrent(a -> std.equals(a.getEquipmentStd())))
// 算总和
.stream().reduce(Integer::sum).orElse(0);
// 把两个流合成一个流
Stream.concat(stream1,stream2);
// 不同点在于如果是null  of会报错,ofnullable不会
Optional.of(e)
Optional.ofNullable(e)
如果对象是否空
.isPresent();
// 取某一个字段
.map(XXX::getXXXX)
// 是否时返回的code
.orElse("")
.orElseGet
.orElseThrow
// :: 方法引用   必须是类已经存在,方法也已经存在
String::toUpperCase
// 父类方法引用
method(supper::hello);
// 类中方法引用
method(this::hello);
// 构造器引用
creatDate(name,AgeData::new);

源码地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值