JUC并发编程_四大函数式接口和 Stream 流式计算

四大函数式接口

Function 接口

接受一个输入参数并返回结果。主要用于转换数据,比如字符串转大写、数字加一等。
方法:R apply(T t)

Function<String, String> function = (String str) -> {
	if (StrUtils.isNotEmpty(str)) {
		return str;
	} else {
		return "";
	}
};
System.out.println(function.apply("blu"));

Predicate 接口

方法:boolean test(Object o)
接受单个输入参数并返回布尔值结果。主要用于条件判断,比如检查字符串是否为空、数字是否大于某个值等。

Predicate predicate = (Predicate<String>) str -> StrUtils.isEmpty(str);
System.out.println(predicate.test("blu"));

Consumer 接口

方法:void accept(T t)
接受单个输入参数但不返回任何结果,主要用于执行某些操作,比如打印日志、发送数据等。

Consumer<String> consumer = str -> System.out.println(str);
consumer.accept("blu");

Supplier 接口

方法:T get()
不接受任何参数但返回某种类型结果,主要用于提供数据,比如生成随机数、获取当前时间等。

Supplier<Integer> supplier = () -> {
	Random random = new Random();
	//生成0-100的随机整数
    return random.nextInt(101);
};
System.out.println(supplier.get());

Stream 流式计算

List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("4");
list.add("");
list.stream().filter(s -> {return !s.isEmpty();})
			 .filter(s -> {return Integer.parseInt(s) > 2;})
			 .map(s -> {return Integer.parseInt(s);})
			 .sorted(Comparator.reverseOrder())
			 .distinct()
			 .limit(1)
			 .forEach(i -> {
			 	System.out.println(i * 100);
			 });

Stream 的中间操作

filter:过滤流中的元素,只保留满足条件的元素
Stream<T> filter(Predicate<? super T> predicate);
map:对流中的每个元素应用一个函数,并将结果收集到一个新的流中
<R> Stream<R> map(Function<? super T, ? extends R> mapper);
sorted:对流中的元素进行排序
Stream<T> sorted(Comparator<? super T> comparator);
distinct:去除流中的重复元素
Stream<T> distinct();
limit:获取流中的前N个元素
Stream<T> limit(long maxSize);
skip:跳过流中的前N个元素
Stream<T> skip(long n);

Stream 的终端操作

forEach:对流中的每个元素执行一个操作
stream.forEach(i -> {
	//do Something
});
collect:将流中的元素收集到一个List、Set或Map中
stream.collect(Collectors.toList());
count:统计流中的元素数量
long count = stream.count();
min/max:查找流中的最小或最大元素
stream.min(Comparator.comparing(i -> {
	return i;
}));
reduce:通过某种计算将流中的所有元素组合起来,得到一个值

求和

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream().reduce(0, Integer::sum);

字符串拼接

List<String> strs = Arrays.asList("B", "L", "U");
String all = strs.stream().reduce("Hello ", (s, s2) -> s + s2);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值