本文介绍: 其在使用时一般结合Lambda表达式,简化集合、数组的操作。无法直接使用stream流,需要先使用keySet()、entrySet()转换成单列集合才可使用。需求:按照下面的要求完成集合的创建和遍历创建一个集合,存储多个字符串元素。2.把“张”开头的,长度为3的元素再存储到新集合中。1.把所有以“张”开头的元素存储到新集合中。list.add(“张无忌”);list.add(“周芷若”);list.add(“张三丰”);list.add(“赵敏”);list.add(“张强”);
Java流Stream使用详解
需求:按照下面的要求完成集合的创建和遍历创建一个集合,存储多个字符串元素
ArrayList<String> list =new ArrayList<>();
list.add(“赵敏”);
list.add(“张强”);
list.add(“张三丰”);
import java.util.ArrayList;
public class StreamFirstTime {
public static void main(String[] args) {
ArrayList<String> list =new ArrayList<>();
list.add("张无忌");
list.add("周芷若");
list.add("赵敏");
list.add("张强");
list.add("张三丰");
/*
1.把所有以“张”开头的元素存储到新集合中
2.把“张”开头的,长度为3的元素再存储到新集合中
3.遍历打印最终结果
*/
/*ArrayList<String> newList = new ArrayList<>();
ArrayList<String> newList2 = new ArrayList<>();
for (String name : list) {
if (name.startsWith("张")){
newList.add(name);
if (name.length() == 3){
newList2.add(name);
}
}
}
// 打印
for (String name : newList) {
System.out.println(name);
}
System.out.println("==========");
// 打印
for (String name : newList2) {
System.out.println(name);
}*/
// 使用流进行过滤和打印
list.stream().filter(s->s.startsWith("张")).filter(s->s.length() == 3).forEach(s -> System.out.println(s));
}
}
Stream流相当于流水线,可以进行流式操作。其在使用时一般结合Lambda表达式,简化集合、数组的操作
中间方法 |
||
打印 |
终结方法 |
方法名 |
||
单列集合 |
||
双列集合 |
无 |
|
一堆零散数据 |
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.stream.Stream;
public class StreamDemo2 {
public static void main(String[] args) {
// 1.单列集合
// 获取流:直接使用Collection中的默认方法stream()
Collection<String> collection = new ArrayList<>();
Collections.addAll(collection,"aaa", "bbb", "ccc");
// 默认方法stream()获取流
Stream<String> stream = collection.stream();
// 使用终结方法打印一下流水线上的所有数据,lambda实现
stream.forEach(s -> System.out.println(s));
}
}
import java.util.HashMap;
import java.util.Map;
public class StreamDemo3 {
public static void main(String[] args) {
// 2. 双列集合使用流
// 创建双列集合
Map<String, Integer> hm = new HashMap<>();
// 添加数据
hm.put("一", 1);
hm.put("二", 2);
hm.put("三", 3);
hm.put("四", 4);
hm.put("五", 5);
// 获取stream流
// 双列集合无法直接创建stream流
// 需要使用keySet或entrySet转换后才能使用
// 打印所有key
hm.keySet().stream().forEach(s -> System.out.println(s));
// 打印所有values
hm.values().stream().forEach(i -> System.out.println(i));
// entrySet方法,打印所有entry
hm.entrySet().stream().forEach(entry -> System.out.println(entry));
}
}
import java.util.Arrays;
public class StreamDemo4 {
public static void main(String[] args) {
// 3.数组的Stream使用方法
// 创建数组
int[] arr1 = {1, 2, 3, 4, 5, 6};
String[] arr2 = {"a", "b", "c", "d", "e"};
// 获取stream流,使用Arrays的stream方法
Arrays.stream(arr1).forEach(i -> System.out.println(i));
Arrays.stream(arr2).forEach(s -> System.out.println(s));
}
}
一堆零散的数据,用Stream.of方法:
import java.util.stream.Stream;
public class StreamDemo5 {
public static void main(String[] args) {
// 一堆零散的数据
// 这堆数据需要是同一种类型,否则无法使用stream
// 一堆数值
Stream.of(1, 2, 3, 4, 5).forEach(i -> System.out.println(i));
// 一堆字符串
Stream.of("a", "b", "c").forEach(s -> System.out.println(s));
}
}
- Stream.of方法的坑
Stream接口中静态方法of的坑,方法的形参是一个可变参数,可以传递一堆零散的数据,也可以传递数组,但是数组必须是引用数据类型的,如果传递基本数据类型,是会把整个数组当做一个元素,放到Stream当中。如下代码:
import java.util.stream.Stream;
public class StreamDemo6 {
public static void main(String[] args) {
String[] arr1 = {"一", "二", "三"};
int[] arr2 = {1, 2, 3};
// 这个打印元素内容
Stream.of(arr1).forEach(s -> System.out.println(s));
// 这个打印的是地址,因为arr2装的是基本数据类型。可能不是你想要的效果!
Stream.of(arr2).forEach(s -> System.out.println(s));
/* 本程序输出:
* 一
* 二
* 三
* [I@682a0b20
*/
}
}
原文地址:https://blog.csdn.net/weixin_50083448/article/details/134739139
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_35222.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。