import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class StreamDemo1 {
public static void main(String[] args) {
demo2();
}
public static void demo1() {
List<String> list = new ArrayList<>();
list.add("张无忌");
list.add("周芷若");
list.add("赵敏");
list.add("张强");
list.add("张三丰");
list.add("张小四");
// list.stream()
// .filter(name -> name.startsWith("张"))
// .filter(name -> name.length() == 3)
// .forEach(System.out::println);
List<String> newList = list.stream()
.filter(name -> name.startsWith("张"))
.filter(name -> name.length() == 3)
.collect(Collectors.toList());
System.out.println(newList);
}
public static void demo2() {
// 获取集合的stream流
Collection<String> list = new ArrayList<>();
list.add("张无忌");
list.add("周芷若");
Stream<String> s1 = list.stream();
//map 集合 转为stream流
Map<String ,Integer> map = new HashMap<>();
map.put("张无忌", 16);
map.put("周芷若", 17);
// 获取键流
Stream<String> s2 = map.keySet().stream();
// 获取值流
Stream<Integer> s3 = map.values().stream();
// 获取键值对流
Stream<Map.Entry<String, Integer>> s4 = map.entrySet().stream();
s4.filter(entry -> entry.getKey().startsWith("张"))
.filter(entry -> entry.getValue() >= 16)
.forEach(entry -> System.out.println(entry.getKey() + "---" + entry.getValue()));
// 获取数组的流
String[] arr = new String[]{"张无忌", "周芷若", "赵敏", "张强", "张三丰"};
Stream<String> s5 = Arrays.stream(arr);
System.out.println(s5.count());
Stream<String> arr1 = Stream.of(arr);
System.out.println(arr1.count());
Stream<String> s6 = Stream.of("张无忌", "周芷若", "赵敏", "张强", "张三丰");
System.out.println(s6.count());
//'List.of().stream()' 可被替换为 'Stream.of()'
List.of("张无忌", "周芷若", "赵敏", "张强", "张三丰").stream()
.filter(name -> name.startsWith("张"))
.filter(name -> name.length() == 3)
.forEach(System.out::println);
}
}
public class Teacher implements Comparable<Teacher>{
private String name;
private int age;
private int salary;
public Teacher(String name, int age, int salary){
this.name = name;
this.age = age;
this.salary = salary;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public int getSalary(){
return salary;
}
@Override
public int compareTo(Teacher t){
return this.salary - t.salary;
}
@Override
public String toString(){
return "Teacher{" +
"name='" + name + '\'' +
", age=" + age +
", salary=" + salary +
'}';
}
}
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class StreamDemo2 {
public static void main(String[] args)
{
// Collection<String> list = new ArrayList<>();
List<Teacher> tearchs = new ArrayList<>();
tearchs.add(new Teacher("张三", 23,5000));
tearchs.add(new Teacher("Jack", 22,10000));
tearchs.add(new Teacher("Tom", 21,7000));
tearchs.add(new Teacher("Lucy", 20,9000));
tearchs.add(new Teacher("Mike", 19,6000));
tearchs.add(new Teacher("Lily", 18,4000));
tearchs.stream()
.filter(t -> t.getSalary() > 5000)
.sorted((t1, t2) -> t2.getSalary() - t1.getSalary())
.forEach(System.out::println);
System.out.println("--------------------------------");
long count = tearchs.stream().filter(t -> t.getSalary() > 5000).count();
System.out.println(count);
System.out.println("--------------------------------");
// Optional<Teacher> max = tearchs.stream().max((t1, t2) -> t1.getSalary() - t2.getSalary());
// System.out.println(max.get());
Optional<Teacher> max = tearchs.stream().max((t1, t2) -> Double.compare(t1.getSalary() , t2.getSalary()));
System.out.println(max.get());
System.out.println("--------------------------------");
Optional<Teacher> min = tearchs.stream().min((t1, t2) -> Double.compare(t1.getSalary() , t2.getSalary()));
System.out.println(min.get());
System.out.println("--------------------------------");
tearchs.stream().map(Teacher::getName).forEach(System.out::println);
System.out.println("--------------------------------");
tearchs.stream().mapToInt(Teacher::getSalary).forEach(System.out::println);
System.out.println("--------------------------------");
// 收集到集合或者数组中去
Stream<String> s1 = tearchs.stream().map(Teacher::getName);
List<String> list = s1.collect(Collectors.toList());
System.out.println(list);
List<Teacher> collect = tearchs.stream().filter(t -> t.getSalary() > 5000).sorted((t1, t2) -> Double.compare(t2.getSalary() , t1.getSalary())).limit(2).collect(Collectors.toList());
System.out.println(collect);
Set<Teacher> collect1 = tearchs.stream().filter(t -> t.getSalary() > 5000).sorted((t1, t2) -> Double.compare(t2.getSalary() , t1.getSalary())).skip(2).collect(Collectors.toSet());
System.out.println(collect1);
Map<String, Integer> map = tearchs.stream().collect(Collectors.toMap(Teacher::getName, Teacher::getAge));
System.out.println(map);
Map<String, Teacher> map1 = tearchs.stream().collect(Collectors.toMap(Teacher::getName, t -> t));
System.out.println(map1);
Map<String, Integer> map2 = tearchs.stream().collect(Collectors.toMap(Teacher::getName, Teacher::getSalary));
System.out.println(map2);
Map<String, Teacher> map3 = tearchs.stream().collect(Collectors.toMap(new Function<Teacher, String>() {
@Override
public String apply(Teacher teacher) {
return teacher.getName();
}
}, new Function<Teacher, Teacher>() {
@Override
public Teacher apply(Teacher teacher) {
return teacher;
}
}));
System.out.println(map3);
}
}