Java8集合遍历之Stream流

本文详细介绍了Java8中如何使用Stream流进行集合遍历,包括获取流的方式、常用方法如count、forEach、filter、limit、skip和map,以及如何将Stream结果收集到集合和数组。同时,提到了不同数据量下Stream的性能对比。
摘要由CSDN通过智能技术生成

Java8 集合遍历之Stream流

1、获取流


1.1 List、Set、vector获取流

所有的Collection集合都可以通过stream默认方法获取流

List<String> list = new ArrayList();
​
list.stream();
​
​
Set<String> set = new Set();
​
set.stream();
​
Vector<String> vector = new Vector<>();
vector.stream();
1.2 Map获取流

java.util.Map接口不是Collection的子接口,其数据结构为K-V键值对,获取流需要分key、value或entry等情况

Map<String,Object> map = new HashMap<>();
​
Stream<String> keyStream = map.keySet().stream();
Stream<Object> valueStream = map.values().stream();
​
Stream<Map.Entry<String,Object>>  entryStream =map.entrySet().stream();
1.3 数组获取流

数组不属于集合,没有默认方法,使用Stream接口中提供的类方法of()

String[] array = {"张三","李四","王五"};
Stream<String> stream = Stream.of(array);

2、常用方法

方法名方法作用是否支持链式调用
count统计个数
forEach遍历逐一处理
filter过滤
limit取前几个,截取元素
skip取后几个,截取元素
map映射
concat组合
2.1 count (统计个数)

long count() 返回值为long ,用于返回集合元素的个数

List<String> list =List.of("张三","李四","王五");
​
Stream<String> stream = list.stream();
stream.count();  //   3
2.2 forEach : 逐一处理

注:用于循环遍历,但不能保证元素逐一执行动作能有序执行

List<String> list =List.of("张三","李四","王五");
​
Stream<String> stream = list.stream();
stream.forEach( s -> System.out.println(s));
2.3 filter(过滤)

将steam流转换为另一个子集流,用于过滤操作

Stream<T> filter(Predicate<? super T> predicate);
List<String> list =List.of("张三","李四","王五");
​
Stream<String> stream = list.stream();
stream.filter(s -> s.startsWith("李")).forEach(System.out::println);   //李四
2.4 limit (截取指定长度)

对当前流进行截取,指定截取长度

Stream<T> limit(long maxSize);
 List<String> list =List.of("张三","李四","王五");
 List<String> list1 = new ArrayList<>();
 
 list.stream().limit(2).forEach(s -> list1.add(s));
 System.out.println(list1);   //[张三, 李四]
2.5 skip (从指定长度开始截取)

对当前流进行截取,从当前长度开始截取

Stream<T> skip(long n);
List<String> list =List.of("张三","李四","王五");
List<String> list1 = new ArrayList<>();

list.stream().skip(2).forEach(s -> list1.add(s));
System.out.println(list1);   //[王五]
2.6 map(映射)

将流中的元素映射到另一个流中

<R> Stream<R> map(Function<? super T, ? extends R> mapper);
  List<String> list =List.of("1","2","3");
  Stream<Integer> stream = list.stream().map(s -> Integer.parseInt(s));
2.7 concat(组合,合并流)

将两个流合并为一个流,是属于Stream中的静态方法

static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b)
 Stream<String> streamA = Stream.of("张三");
 Stream<String> streamB = Stream.of("李四");
 
 Stream<String> result = Stream.concat(streamA, streamB);
3、收集Stream结果
3.1 收集到集合中

使用collect方法,配合使用java.util.stream.Collectors类提供的方法

public static <T> Collector<T, ?, List<T>> toList():转换为List集合。
public static <T> Collector<T, ?, Set<T>> toSet():转换为Set集合。
 Stream<String> stream = Stream.of("10", "20", "30", "40", "50");
 List<String> list = stream.collect(Collectors.toList());  //[50, 40, 30, 20, 10]
 Set<String> set = stream.collect(Collectors.toSet());   //[50, 40, 30, 20, 10]
3.2 收集到数组中

Stream提供toArray方法来将结果放到一个数组中,由于泛型擦除的原因,返回值类型是Object[]的

Object[] toArray();
Stream<String> stream = Stream.of("10", "20", "30", "40", "50");
Object[] objArray = stream.toArray();

注:

如果数据在1万以内的话,for循环效率高于foreach和stream;如果数据量在10万的时候,stream效率最高,其次是foreach,最后是for。另外需要注意的是如果数据达到100万的话,parallelStream异步并行处理效率最高,高于foreach和for,在处理大数据的情况下,尽量使用stream流操作

  • 21
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
遍历Java集合可以使用Java 8引入的Stream的方式。Stream提供了一种对集合进行操作的高阶抽象。通过使用Stream,可以使用类似于SQL语句的方式对集合进行查询和操作。下面是一个使用Stream遍历集合的示例代码: ```java import java.util.ArrayList; import java.util.stream.Stream; public class StreamDemo { public static void main(String[] args) { ArrayList<String> webSites = new ArrayList<>(); webSites.add("baidu"); webSites.add("google"); webSites.add("weibo"); // 使用Stream遍历集合 webSites.stream().forEach(e -> { System.out.println(e); }); } } ``` 在这个示例中,我们创建了一个ArrayList集合`webSites`,并向其中添加了三个元素。然后,我们使用`stream()`方法将集合转换为,之后使用`forEach()`方法对中的每个元素进行遍历,并将元素打印出来。这样就可以使用Stream集合进行遍历了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Stream遍历集合,对集合中数据进行过滤](https://blog.csdn.net/qq_40649503/article/details/108762599)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Java8 用Stream代替传统的集合遍历](https://blog.csdn.net/joshua317/article/details/128244212)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值