请注意,本文编写于 1053 天前,最后修改于 678 天前,其中某些信息可能已经过时。
常见的Stream流生成
数组
String[] strArrays = {"hello","hhh","lalala"};
Stream<String> strStream = Stream.of(strArrays);
// 也可以直接食用
Stream<Integer> integerStream = Stream.of(10, 11, 12);
List集合
List<String> list = new ArrayList<>();
Stream<String> listStream = list.stream();
Set集合
Set<String> set = new HashSet<>();
Stream<String> setStream = set.stream();
Map集合
Map<String,String> map = new HashMap<>();
Stream<String> keyStream = map.keySet().stream();
Stream<String> valuesStream = map.values().stream();
// 或者
Stream<Map.Entry<String, String>> stream = map.entrySet().stream();
常见的Stream方法
先事先准备一个数组,做测试用。
List<String> list = new ArrayList<>();
list.add("钟先生");
list.add("钟太太");
list.add("钟老");
list.add("张老板");
list.add("张总");
filter
用于对流中的数据进行过滤(注意:是把你需要的内容过滤出来)
需求1. 把list集合中以张开头的元素在控制台输出
list.stream().filter(s -> s.startsWith("张")).forEach(System.out::println);
需求2. 把长度为3的输出
list.stream().filter(s -> s.length() == 3).forEach(System.out::println);
需求3. 把集合中以张开头且长度为3的元素输出
list.stream()
.filter(s -> s.startsWith("张"))
.filter(s -> s.length() == 3)
.forEach(System.out::println);
limit
返回此流中的元素组成的流,截取前指定参数个数的数据
需求1. 取前3个数据在控制台输出
list.stream().limit(3).forEach(System.out::println);
skip
跳过指定参数个数的数据,返回由该流的剩下元素组成的流
需求1. 跳过前3个元素,把剩下的输出
list.stream().skip(3).forEach(System.out::println);
需求2. 跳过2个元素,把剩下的元素中前2个输出
list.stream().skip(2).limit(2).forEach(System.out::println);
concat
合并两个流成为一个新的流,静态方法,调用时应该是Stream.concat()
需求:取前4个数据组成一个流,跳过2个数组组成一个流,将两个流合并
Stream<String> s1 = list.stream().limit(4);
Stream<String> s2 = list.stream().skip(2);
Stream.concat(s1,s2).forEach(System.out::println);
distinct
消除重复数据
需求:上面合并后的流中元素不重复
Stream.concat(s1,s2).distinct().forEach(System.out::println);
sorted
需求1:按照字母顺序把数据输出
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("b");
list.add("a");
list.add("dc");
list.add("da");
list.stream().sorted().forEach(System.out::println);
}
count
统计数量
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("b");
list.add("a");
list.add("dc");
list.add("da");
long count = list.stream().count();
System.out.println(count);
}
Stream流收集
收集到List集合
List<String> list = new ArrayList<>();
list.add("钟先生");
list.add("钟太太");
list.add("钟老");
list.add("张老板");
list.add("张总");
Stream<String> stream = list.stream().filter(s -> s.startsWith("钟"));
List<String> collect = stream.collect(Collectors.toList());
收集到Set集合
Set<String> set = new HashSet<>();
set.add("钟先生");
set.add("钟太太");
set.add("钟老");
set.add("张老板");
set.add("张总");
Stream<String> stream = set.stream().filter(s -> s.length() == 2);
Set<String> collect = stream.collect(Collectors.toSet());
收集到Map
下面的代码根据需求来写,有些复杂,可能需要你仔细阅读一下代码才能看懂.
// 该数组表示(名字,分数)
String[] strings = {"乐心湖,100", "张小王,90", "王小湖,66"};
// 得到分数大于70的家伙
Stream<String> stream = Stream.of(strings).
filter(s -> Integer.parseInt(s.split(",")[1]) > 70);
//使用stream流操作完毕的数据收集到Map集合中并遍历,姓名为key,年龄为value
Map<String, Integer> map = stream.collect(Collectors.toMap(
s -> s.split(",")[0],
s -> Integer.parseInt(s.split(",")[1]))
);
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey()+": "+entry.getValue());
}
版权属于:乐心湖's Blog
本文链接:https://www.xn2001.com/archives/466.html
声明:博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!
One comment
hello