Java Stream API 是 Java 8 引入的一个功能强大的工具,用于处理集合数据。它允许你以声明性方式处理数据,类似于 SQL 查询。Stream API 提供了丰富的中间操作(如 filter、map)和终端操作(如 collect、forEach),使得数据处理更加简洁和高效。
Java Stream 主要有两种类型:
Stream API 广泛应用于集合数据的过滤、映射、聚合等操作。例如,从一个列表中筛选出特定条件的元素,或者对集合中的元素进行转换和汇总。
假设我们有一个枚举类型 Status
,并且我们希望根据不同的枚举值实例化不同数量的新对象。
import java.util.*;
import java.util.stream.*;
enum Status {
ACTIVE, INACTIVE, PENDING
}
class MyObject {
private String name;
private Status status;
public MyObject(String name, Status status) {
this.name = name;
this.status = status;
}
@Override
public String toString() {
return "MyObject{" +
"name='" + name + '\'' +
", status=" + status +
'}';
}
}
public class StreamExample {
public static void main(String[] args) {
List<MyObject> objects = Arrays.asList(
new MyObject("Obj1", Status.ACTIVE),
new MyObject("Obj2", Status.INACTIVE),
new MyObject("Obj3", Status.PENDING),
new MyObject("Obj4", Status.ACTIVE)
);
Map<Status, Long> countByStatus = objects.stream()
.collect(Collectors.groupingBy(MyObject::getStatus, Collectors.counting()));
System.out.println("Count by status: " + countByStatus);
Map<Status, List<MyObject>> filteredByStatus = objects.stream()
.filter(obj -> obj.getStatus() == Status.ACTIVE)
.collect(Collectors.groupingBy(MyObject::getStatus));
System.out.println("Filtered by status: " + filteredByStatus);
}
}
IntStream.range
生成索引,然后结合 map
操作创建对象。filter
操作筛选出符合条件的对象,然后使用 map
操作创建新对象。问题:如何根据不同的枚举值实例化不同数量的新对象?
解决方法:
Map<Status, Integer> countMap = new EnumMap<>(Status.class);
countMap.put(Status.ACTIVE, 3);
countMap.put(Status.INACTIVE, 2);
countMap.put(Status.PENDING, 1);
List<MyObject> newObjects = countMap.entrySet().stream()
.flatMap(entry -> IntStream.range(0, entry.getValue())
.mapToObj(i -> new MyObject("Obj" + (i + 1), entry.getKey())))
.collect(Collectors.toList());
System.out.println("New objects: " + newObjects);
通过上述代码和解释,你可以看到如何使用 Java Stream API 实例化具有索引和特定枚举值的不同数量的新对象,并解决相关问题。
DB・洞见
T-Day
Elastic 中国开发者大会
Hello Serverless 来了
DB TALK 技术分享会
云+社区技术沙龙[第7期]
云+社区技术沙龙[第27期]
云+社区技术沙龙[第1期]
云+社区技术沙龙[第15期]
领取专属 10元无门槛券
手把手带您无忧上云