在Java中,stream()方法是集合框架的一部分,允许集中处理数据集合。
1. stream() 方法
stream() 方法可以在任何实现了Collection接口的集合上被调用(例如,List、Set等),它会返回一个表示该集合的顺序流。
List<DealerSalerMore> dealerSalerMoreList = // 初始化列表
Stream<DealerSalerMore> stream = dealerSalerMoreList.stream();
2. 流操作的分类
流的操作主要分为两类:中间操作 和 终端操作。
中间操作(Intermediate Operations)
中间操作返回一个新的流,可以进行链式调用。这些操作是惰性求值的,即只有在终端操作执行时才会执行这些操作。常见的中间操作包括:
- filter:用于过滤流中的元素。该函数返回
true或falseStream<DealerSalerMore> filteredStream = stream .filter(dealer -> "0".equals(dealer.getState())); - map:用于将流中的每个元素转换为另一种类型,接收一个
Function。Stream<String> idStream = filteredStream .map(DealerSalerMore::getDealerId); - sorted:对流的元素进行排序。
Stream<DealerSalerMore> sortedStream = stream .sorted(Comparator.comparing(DealerSalerMore::getSomeProperty)); - distinct:去除流中重复的元素。
Stream<DealerSalerMore> distinctStream = stream .distinct();
终端操作(Terminal Operations)
终端操作产生一个结果,或者产生副作用。一旦执行了终端操作,流就被消耗,无法再使用。常见的终端操作包括:
-
collect:将流中的元素收集到集合中,通常用于返回一个列表、集合或映射。
List<String> dealerIdList = idStream .collect(Collectors.toList()); -
forEach:对流中的每个元素执行操作。
idStream.forEach(System.out::println); -
reduce:对流中的元素进行归约操作,将多个元素合并成一个结果。
Optional<String> result = idStream .reduce((s1, s2) -> s1 + ", " + s2); -
count:返回流中元素的数量。
long count = stream.count();
综合示例
List<A> aList = aMapper.getAllAByAId(map.get("AId"));
List<String> tempAList = aList.stream()
.filter(f -> "0".equals(f.getState()) || "0".equals(f.getDr())) // 过滤
.map(A::getAName) // 提取 AName
.collect(Collectors.toList()); // 收集到 List<String>
例子表:
| AName | State | Dr |
| Name1 | 0 | 1 |
| Name2 | 1 | 0 |
| Name3 | 1 | 1 |
| Name4 | 0 | 0 |
- 过滤获得status等于0或者dr等于0的值
| Name1 | 0 | 1 |
| Name2 | 1 | 0 |
| Name4 | 0 | 0 |
- 保留AName
| Name1 |
| Name2 |
| Name4 |
- 重新转Collection