package com.wcs.demo2;
import java.util.ArrayList;
import java.util.stream.Stream;
/**
* Stream流中的常用方法
*/
public class StreamTest03 {
public static void main(String[] args) {
//forEach方法,用来遍历流中的数据
//是一个终结方法,遍历之后就不能继续调用Stream流中的其他方法
Stream<String> stream1 = Stream.of("张三", "李四", "王五", "赵六");
stream1.forEach(name -> System.out.println(name));
//需要将流中的元素映射到另一个流中,可以使用map方法
Stream<String> stream2 = Stream.of("1", "2", "3", "4");
Stream<Integer> stream3 = stream2.map((String s) -> {
return Integer.parseInt(s);
});
//遍历stream3流
stream3.forEach(i -> System.out.println(i));
//long count();统计Stream流中元素的个数,终结方法
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.add(6);
Stream<Integer> stream4 = list.stream();
long count = stream4.count();
System.out.println(count);//6
//limit方法是一个延迟方法,对流中的元素进行截取,
//返回的是一个新的流,所以可以继续调用Stream流中的其他方法
String[] arr = {"a", "b", "c", "e", "f"};
Stream<String> arr1 = Stream.of(arr);
//使用limit方法对Stream中的元素进行截取,只要前3个元素
Stream<String> limit = arr1.limit(3);
limit.forEach(s -> System.out.println(s));//a b c
//skip方法,跳过前几个元素,截取一个新的流
String[] arrs = {"a", "b", "c", "e", "f"};
Stream<String> arrs1 = Stream.of(arrs);
Stream<String> skip = arrs1.skip(2);
skip.forEach(k -> System.out.println(k));//c e f
//concat方法,用于把流组合到一起
Stream<String> s1 = Stream.of("jack", "rose", "Lee", "demo");
Stream<String> s2 = Stream.of("张飞", "刘备", "关羽", "诸葛");
Stream<String> ss = Stream.concat(s1, s2);
ss.forEach(name -> System.out.println(name));
}
}
使用Stream的实例
package com.wcs.demo2;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.stream.Stream;
/**
* @author wcs
* @create 2021-08-20 17:01
*/
public class StreamTest04 {
public static void main(String[] args) {
//创建集合对象
ArrayList<Hero> heroes = new ArrayList<>();
heroes.add(new Hero("锐雯"));
heroes.add(new Hero("伊泽瑞尔"));
heroes.add(new Hero("盲僧"));
heroes.add(new Hero("石头人"));
heroes.add(new Hero("剑圣"));
//遍历集合对象
System.out.println(heroes);
//取出名字为四个字的Hero,放进一个新的集合
ArrayList<Hero> newHero = new ArrayList<>();
for (Hero hero : heroes) {
if (hero.getName().length() == 4) {
System.out.println(hero);//Hero[name='伊泽瑞尔']
newHero.add(hero);
}
}
//使用Stream方式取出名字为四个字的Hero
Stream<Hero> heroStream = heroes.stream().filter(hero -> hero.getName().length() == 4);
System.out.println("---------------");
//创建集合对象
ArrayList<Tools> tools = new ArrayList<>();
tools.add(new Tools("打野刀"));
tools.add(new Tools("长剑"));
tools.add(new Tools("多兰之戒"));
tools.add(new Tools("多兰之盾"));
tools.add(new Tools("多兰之刃"));
//取出前两个字为“多兰”的装备放进一个新的集合
ArrayList<Tools> newTool = new ArrayList<>();
for (Tools tool : tools) {
if (tool.getName().startsWith("多兰")) {
System.out.println(tool);
newTool.add(tool);
}
}
//使用Stream取出前两字为“多兰”的装备
Stream<Tools> toolsStream = tools.stream().filter(tools1 -> tools1.getName().startsWith("多兰"));
System.out.println("-------------");
//合并两个新集合
ArrayList<Object> all = new ArrayList<>();
all.addAll(newHero);
all.addAll(newTool);
for (Object o : all) {
System.out.println(o);
}
//使用Stream合并两个新集合,并输出
Stream.concat(heroStream, toolsStream).forEach(System.out::println);
}
}
//Lombok组件:省去get、set方法和构造方法
@Data
@AllArgsConstructor
@NoArgsConstructor
class Hero {
private String name;
@Override
public String toString() {
return "Hero[" +
"name='" + name + '\'' +
']';
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
class Tools {
private String name;
@Override
public String toString() {
return "Tools{" +
"name='" + name + '\'' +
'}';
}
}