Java Stream流基础
class Tests {
public static void main(String[] args) {
// ==================Set获取Stream流==================
Set<String> sets = new HashSet<>(); // new TreeSet<>()亦如此
Stream<String> setStream = sets.stream();
// ==================Map获取Stream流==================
Map<String,Integer> maps = new TreeMap<>(); // new HashMap<>()亦如此
Stream<String> keyStream = maps.keySet().stream();
Stream<Integer> valueStream = maps.values().stream();
// ==================数组获取Steam流==================
String[] arrays = new String[]{"Java","C++","JavaScript","Go","Python"};
Stream<String> arrayStream1 = Arrays.stream(arrays); // 方式一
Stream<String> arrayStream2 = Stream.of(arrays); // 方式二
// * Stream流只能使用一次
List<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
list.add("赵六");
list.add("张三一");
list.add("李四一");
list.add("王五一");
list.add("赵六一");
list.add("赵七");
list.add("王五二");
list.add("王五三");
list.add("王五一");
// 需求:输出条件为筛选所有姓王并且姓名长度为三的人
list.stream().filter(e -> e.startsWith("王"))
.filter(e -> e.length() == 3)
.forEach(System.out::println);
System.out.println("=====================================");
// 需求:输出条件为筛选所有姓赵并且姓名长度为三的人的数量
long count = list.stream().filter(e -> e.startsWith("赵"))
.filter(e -> e.length() == 3)
.count();
System.out.println(count);
System.out.println("=====================================");
// 需求:输出条件为筛选姓名长度为三的前三人
list.stream().filter(e -> e.length() == 3)
.limit(3).forEach(System.out::println);
System.out.println("=====================================");
// 需求:输出条件为筛选姓名长度为三并跳过前三个的后剩余的人
list.stream().filter(e -> e.length() == 3)
.skip(3).forEach(System.out::println);
System.out.println("=====================================");
// 需求:输出条件为将所有姓名长度为三的人名字去除末尾一字,长度为二的保持不变全部输出
list.stream().map(e -> {
if(e.length() == 3) {
return e.substring(0,2);
}
return e;
}).forEach(System.out::println);
System.out.println("=====================================");
// 需求:输出重复两次的人名
Stream<String> temp = Stream.concat(list.stream(), list.stream());
temp.forEach(System.out::println);
System.out.println("=====================================");
// 需求:输出条件为按照姓名长度从小到大排序
list.stream().sorted((a,b) -> a.length() - b.length())
.forEach(System.out::println);
System.out.println("=====================================");
// 收集Stream流
temp = list.stream().filter(e -> e.length() == 3);
// Stream转化为Set
Set<String> ss = temp.collect(Collectors.toSet());
for (String s : ss) {
System.out.println("姓名:"+s);
}
System.out.println("=====================================");
// Stream转化为List
temp = list.stream().filter(e -> e.length() == 3);
List<String> ls = temp.collect(Collectors.toList());
for (String l : ls) {
System.out.println("姓名:"+l);
}
System.out.println("=====================================");
// Stream转化为数组
temp = list.stream().filter(e -> e.length() == 3);
Object[] strs = temp.toArray();
for (Object str : strs) {
System.out.println(str);
}
}
}