用旧方法:
package it.gao.stream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Demo {
public static void main(String[] args) {
List<String> name=new ArrayList<>();
Collections.addAll(name,"张无忌","张三丰","赵敏","张龙","周猪肉");
System.out.println(name);
//姓张的集合
List<String> zhangname=new ArrayList<>();
for (String s : name) {
if (s.startsWith("张")){
zhangname.add(s);
}
}
System.out.println(zhangname);
List<String> zhangThreeName=new ArrayList<>();
for (String s : zhangname) {
if (s.length()==3){
zhangThreeName.add(s);
}
}
System.out.println(zhangThreeName);
}
}
Stream流实现:
public class Demo {
public static void main(String[] args) {
List<String> name=new ArrayList<>();
Collections.addAll(name,"张无忌","张三丰","赵敏","张龙","周猪肉");
System.out.println(name);
name.stream().filter(s -> s.startsWith("张")).filter(s -> s.length()==3).forEach(s -> System.out.println(s));
}
}
获取stream流的方法:
public class Demo2 {
public static void main(String[] args) {
//collection集合获取stream流
Collection<String> name=new ArrayList<>();
Stream<String> stream = name.stream();
//Map集合获取数组
Map<String,Integer> maps=new HashMap<>();
// 方法一
Stream<String> stream1 = maps.keySet().stream();
Stream<Integer> stream2 = maps.values().stream();
//方法二
Stream<String> keyAndValus=maps.keySet().stream();
int[] arrs={1,2,3,4,5};
Arrays.stream(arrs);
Stream<int[]> arrs1 = Stream.of(arrs);
}
}
Stream流的常用API:
当前面的参数和打印的参数一样时才可以这样简化:
public class Demo3 {
public static void main(String[] args) {
List<String> name=new ArrayList<>();
Collections.addAll(name,"张无忌","张三丰","赵敏","张龙","周猪肉");
System.out.println(name);
long longs = name.stream().filter(s -> s.startsWith("张")).count();
System.out.println(longs);
name.stream().filter(s -> s.startsWith("张")).forEach(s -> System.out.println(s));
System.out.println("============");
name.stream().filter(s -> s.startsWith("张")).limit(2).forEach(s -> System.out.println(s));
System.out.println("============");
name.stream().filter(s -> s.startsWith("张")).skip(1).forEach(s -> System.out.println(s));
System.out.println("============");
name.stream().map(s -> new Student(s)).forEach(student -> System.out.println(student));
Stream<String> list = name.stream().filter(s -> s.startsWith("张"));
Stream<String> list2 = Stream.of("java1", "java2");
Stream<String> concat = Stream.concat(list, list2);
System.out.println("============");
concat.forEach(s -> System.out.println(s));
}
}
在Stream流中无法直接修改集合或者数组的数据,只能用原生API来修改
Stream流的综合应用:
package it.gao.stream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
public class Test4 {
public static double allmoney;
public static void main(String[] args) {
List<Employee> one =new ArrayList<>();
one.add(new Employee("猪八戒","男",20000,5000,"无"));
one.add(new Employee("孙悟空","男",15000,5000,"无"));
one.add(new Employee("汤森","男",10000,5000,"被打"));
one.add(new Employee("白龙马","男",5000,5000,"被打"));
List<Employee> two =new ArrayList<>();
one.add(new Employee("张无忌","男",15000,6000,"无"));
one.add(new Employee("赵敏","男",14000,5000,"无"));
one.add(new Employee("张三丰","男",10000,5000,"被打"));
one.add(new Employee("向左使","男",5000,5000,"被打"));
//第一组最高工资员工信息
Employee employee = one.stream().max((o1, o2) -> Double.compare(o1.getSalary() + o1.getBonus(), o2.getSalary()) + o2.getBonus()
).get();
System.out.println(employee);
//第一组最高工资员工被封装
Topperformer topperformer = one.stream().max((o1, o2) -> Double.compare(o1.getSalary() + o1.getBonus(), o2.getSalary()) + o2.getBonus()
).map(o -> new Topperformer(o.getName(), o.getSalary() + o.getBonus())).get();
System.out.println(topperformer);
//第二组最高工资员工信息
// Employee employee1 = two.stream().max((e1, e2) -> Double.compare(e1.getSalary() + e1.getBonus(), e2.getSalary()) + e2.getBonus()).get();
//第二组最高工资员工被封装
// Topperformer topperformer1 = two.stream().max((e1, e2) -> Double.compare(e1.getSalary() + e1.getBonus(), e2.getSalary()) + e2.getBonus()).map(e -> new Topperformer(e.getName(), e.getSalary() + e.getBonus())).get();
// System.out.println(topperformer1);
Stream<Employee> t1 = one.stream();
Stream<Employee> t2 = two.stream();
Stream<Employee> t3 = Stream.concat(t1, t2);
t3.sorted((o1, o2) -> Double.compare(o1.getSalary() + o1.getBonus(), o2.getSalary()) + o2.getBonus()).skip(1).limit(one.size()+two.size() -2).forEach(e-> {
allmoney+=(e.getSalary()+e.getBonus());
});
BigDecimal bigDecimal=BigDecimal.valueOf(allmoney);
BigDecimal bigDecimal2=BigDecimal.valueOf(one.size()+two.size() -2);
System.out.println("平均工资是:" + bigDecimal.divide(bigDecimal2, 2));
}
}
Stream流的收集:
Stream也是一种手段,不是目的
注意:流只能使用一次