stream和lambda的一些场景用法

场景一:对集合的去重聚合操作

List<String> ips = Lists.newArrayList("10.194.39.102_6408","10.194.39.110_6406","10.194.39.110_6407");
//对集合按ip分组,并将同一个ip的端口聚合
Map<String, String> result = ips.stream().collect(Collectors.toMap(ip -> ip.split("_")[0],
                ip -> ip.split("_")[1],(areaNamUp, areaNamDown) -> areaNamUp + "," + areaNamDown));

最后可以得到,以ip为key,value为逗号隔开的端口字符串,可以很清楚的看到哪些ip,及ip涉及到的端口。

 

### Lambda表达式Stream API在Java中的使用及区别 #### 1. Lambda表达式的定义与用法 Lambda表达式是一种匿名函数的实现方式,它简化了匿名方法的写法,使得函数作为参数传递成为可能。通过Lambda表达式,可以将函数式编程思想引入到Java中,减少冗余代码,提升代码可读性[^1]。 Lambda表达式的语法结构为`形参列表 -> 表达式体`,其中形参列表的类型可以省略,如果只有一个形参,则可以省略括号。例如: ```java // 示例:Lambda表达式的基本用法 Runnable runnable = () -> System.out.println("Hello, Lambda!"); runnable.run(); ``` 此外,当需要提供一个函数式接口的实例时,可以使用方法引用进一步简化代码。例如: ```java // 示例:方法引用 Comparator<Integer> comparator = Integer::compare; ``` #### 2. Stream API的定义与用法 Stream API为集合操作提供了更加声明式的处理方式,使得过滤、排序、聚合等操作更加优雅。Stream API的核心包括中间操作(如`filter`、`map`、`sorted`)终止操作(如`collect`、`reduce`、`forEach`)。以下是一个简单的Stream操作示例: ```java // 示例:使用Stream API进行数据处理 List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); names.stream() .filter(name -> name.startsWith("A")) .map(String::toUpperCase) .forEach(System.out::println); ``` 在这个例子中,`filter`用于筛选以"A"开头的名字,`map`用于将名字转换为大写,`forEach`用于输出结果。 #### 3. Lambda表达式与Stream API的关系 Lambda表达式Stream API是相辅相成的工具。Lambda表达式主要用于简化函数式接口的实现,而Stream API则利用Lambda表达式来执行集合数据的操作。两者结合使用,可以显著提高代码的简洁性可读性[^4]。例如,在Stream API中,`filter`、`map`等方法通常接受Lambda表达式作为参数。 #### 4. Lambda表达式与Stream API的区别 - **功能定位**:Lambda表达式主要关注函数式接口的实现,而Stream API专注于集合数据的操作。 - **使用场景**:Lambda表达式适用于任何需要传递函数的地方,而Stream API主要用于处理集合或数组数据。 - **性能优化**:Stream API支持惰性求值、短路操作并行流等特性,这些特性可以有效提升程序性能[^4]。例如,通过`parallelStream()`可以启用并行流处理大数据集。 #### 5. 注意事项 尽管Lambda表达式Stream API能够显著简化代码,但在实际开发中需要注意以下几点: - 优先使用Stream处理集合,替代传统的for循环,提升可读性[^3]。 - 谨慎选择并行流,仅在数据量大且无状态时使用[^3]。 - 避免复杂Lambda,若Lambda超过3行,考虑抽取为方法[^3]。 - 结合`Optional`处理空值,如`stream.findFirst().orElse(defaultValue)`。 --- ### 示例代码 以下是一个综合示例,展示如何结合Lambda表达式Stream API进行数据处理: ```java import java.util.Arrays; import java.util.List; import java.util.Optional; public class LambdaStreamExample { public static void main(String[] args) { List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6); // 使用Stream APILambda表达式进行数据处理 Optional<Integer> result = numbers.stream() .filter(n -> n % 2 == 0) // 筛选偶数 .map(n -> n * n) // 计算平方 .reduce(Integer::max); // 找到最大值 result.ifPresentOrElse( max -> System.out.println("最大平方值: " + max), () -> System.out.println("未找到结果") ); } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值