生活的有趣在于,昨天的最大痛楚,极可能成就明天的最大力量。
Stream
public class TestStream {
public static void main(String[] args) {
List<String> list=new ArrayList<String>();
for(int i=0;i<1000000;i++) {
UUID u=UUID.randomUUID();
list.add(u.toString());
}
// System.out.println("串行---518-526-517");
// //串行-->一条执行路径 单线成
// long start=System.currentTimeMillis();
// long count=list.stream().sorted().count();
// System.out.println("排序了:"+count);
// long end=System.currentTimeMillis();
// System.out.println("用时:"+(end-start));
System.out.println("并行---296-316-350");
long start=System.currentTimeMillis();
long count=list.parallelStream().sorted().count();//并行-->多条执行路径,多线程
System.out.println("排序了:"+count);
long end=System.currentTimeMillis();
System.out.println("用时:"+(end-start));
}
}
1
public class TestCreateStream {
public static void main(String[] args) {
//Stream--->集合,数组
List<String> list=new ArrayList<String>();
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
list.add("zhaoliu");
list.add("hanhan");
// //1,创建Stream
// Stream<String> stream=list.stream();
// //2中间操作
// Stream<String> center=stream.filter((s)->s.length()>=5);
// //3终止操作 最终操作
// System.out.println("名字长度大于5的是:");
// center.forEach(System.out::println);
//
//简化
list.stream().filter((s)->s.length()>=5).forEach(System.out::println);
}
}
2
public class TestStreamMethod {
public static void main(String[] args) {
List<String> list=new ArrayList<String>();
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
list.add("zhaoliu");
list.add("hanhan");
list.add("xiaozhi");
System.out.println("-------filter-------");
//filter---->过滤 指定原则
list.stream().filter((s)->s.startsWith("x")).filter((s)->s.contains("z")).forEach(System.out::println);
System.out.println("------limit------");
//limit--->截断 ,返回不超过指定数量
list.stream().limit(7).forEach(System.out::println);
System.out.println("-------distinct-------");
List<Emp> elist=new ArrayList<Emp>();
elist.add(new Emp("高强",18,100));
elist.add(new Emp("高蓝轩",28,100));
elist.add(new Emp("刘晗",21,30));
elist.add(new Emp("小智",20,100));
elist.add(new Emp("刘晗",38,30)); //地址不同,hashCode不相等。equals是相等的
//不会影响数据
elist.stream().distinct().forEach(System.out::println);
elist.forEach(System.out::println);
//Map指的是<T,R> 不是集合!
System.out.println("-------map-------");
//emp-->T getName()-->R
elist.stream().map((emp)->emp.getName()).forEach(System.out::println);
elist.stream().map((emp)->emp.getScore()).forEach(System.out::println);
List<String> strList=Arrays.asList("aaa","bbb","ccc","ddd","eee");
//strList.stream().map((s)->s.toUpperCase()).forEach(System.out::println);
strList.stream().map(String::toUpperCase).forEach(System.out::println);
System.out.println("-------sorted------");
//sorted排序,流中的元素必须实现Comparable接口
// list.stream().sorted().forEach(System.out::println);
// elist.stream().sorted().forEach(System.out::println);
System.out.println("---------sorted(Comparator)--------");
elist.stream().sorted((x,y)->Double.compare(x.getScore(), y.getScore())).forEach(System.out::println);
}
}
public class Emp {
private String name;
private int age;
private double score;
@Override
public int hashCode() {
return (int)(this.name.hashCode()+this.age+this.score);
}
@Override
public boolean equals(Object obj) {
//比较两个引用是否指向同一个对象
if(this==obj) {
return true;
}
//2.obj是否为空
if(obj==null) {
return false;
}
//3.判断两个引用的实际类型
if(this.getClass()!=obj.getClass()) {
return false;
}
//4.强转
Emp emp=(Emp)obj;
//5.比较
if(this.name.equals(emp.getName())&&this.age==emp.getAge()&&this.score==emp.getScore()){
return true;
}
return super.equals(obj);
}
public Emp() {
super();
}
public Emp(String name, int age, double score) {
super();
this.name = name;
this.age = age;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
@Override
public String toString() {
return "Emp [name=" + name + ", age=" + age + ", score=" + score + "]";
}
public int compareTo(Emp o) {
return this.age-o.getAge();
}
}
3
public class TestEndMethod {
public static void main(String[] args) {
//1.forEach--->遍历
List<String> list=new ArrayList<String>();
list.add("Blist");
list.add("BSet");
list.add("C罗");
list.add("M西");
list.add("Eelement");
//list.forEach(System.out::println);
//2.count--->流中元素的个数
System.out.println("----------count-------");
int count=(int)list.stream().filter((s)->s.length()>=3).count();
System.out.println("流中有:"+count);
System.out.println("-------anymatch-------");
boolean b1=list.stream().filter((s)->s.length()>=3).anyMatch((s)->s.startsWith("A"));
System.out.println("有没有A开头的:"+b1);
System.out.println("---------allmatch-------");
boolean b2=list.stream().filter((s)->s.length()>=3).allMatch((s)->s.contains("t"));
System.out.println(b2);
System.out.println("----------findfirst--------");
String str=list.stream().filter((s)->s.length()>=3).findFirst().get();
System.out.println(str);
System.out.println("------findany-------");
Optional<String> o=list.parallelStream().findAny();
System.out.println(o.get());
Optional<String> o2=list.parallelStream().findAny();
System.out.println(o2.get());
System.out.println("------max-----");
List<Emp> elist=new ArrayList<Emp>();
elist.add(new Emp("高强",18,100));
elist.add(new Emp("高蓝轩",28,100));
elist.add(new Emp("晗晗",21,30));
elist.add(new Emp("小智",20,100));
elist.add(new Emp("晗晗",38,30));
Optional<Emp> max=elist.stream().max((e1,e2)->e1.getAge()-e2.getAge());
System.out.println(max.get());
System.out.println("--------min------");
Optional<Emp> min=elist.stream().min((e1,e2)->e1.getAge()-e2.getAge());
System.out.println(min.get());
}
}