stream 使用示例
import one.util.streamex.StreamEx;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class TestStram {
public static void main(String[] args) throws IOException {
List<User> userList=createUserList(100);
//使用List创建流,并使用foreach循环打印出来
userList.stream().forEach(System.out::println);
System.out.println("*****************");
//将userList转化为流对象
Stream.of(userList).forEach(System.out::println);
System.out.println("*****************");
//创建一个空流
Stream.empty();
//将两个流合并起来
System.out.println("*****************");
List<User> userList2=createUserList(100);
List<User> userList3=createUserList(10);
//将两个流合并起来
Stream.concat(userList2.stream(),userList3.stream()).forEach(System.out::println);
//查找年龄是偶数的user列表
System.out.println("###############");
List<User> userList4=createUserList(100);
userList4.stream().filter(user -> user.getAge()%2==0).collect(Collectors.toList()).forEach(System.out::println);
//找到年龄为携带奇数的user放到Employee列表中
System.out.println("@@@@@@@@@@@@@@@@@@");
List<User> userList5=createUserList(100);
userList5.stream().filter(user ->user.getAge()%2!=0).map(user->{
Employee employee=new Employee();
employee.setEmployeeId(user.getUserId());
employee.setUserName(user.getName());
return employee;
}).peek(System.out::println).collect(Collectors.toList());
//将一个多维的列表转化为一个单维的列表,即将,<=30的人一个列表,30>= X<=60为一个列表,60为一个列表
System.out.println("&&&&&&&&&&&&&&&&&&&&&&");
List<User> userList6=createUserList(1,30);
List<User> userList7=createUserList(31,60);
List<User> userList8=createUserList(61,90);
List<List<User>> userList9 = new ArrayList<>();
userList9.add(userList6);
userList9.add(userList7);
userList9.add(userList8);
System.out.println(userList9.toString());
userList9.stream().flatMap(Collection::stream).collect(Collectors.toList()).forEach(System.out::println);
System.out.println("+++++++++++++++++++排序++++++++++");
//按照年龄从小到大排序
userList5.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList()).forEach(System.out::println);
//按照年龄从大到小的排序
userList5.stream().sorted(Comparator.comparing(User::getAge).reversed()).peek(System.out::println).collect(Collectors.toList());
//将list列表,先按照年龄从大到小排序,相同年龄的按照id从小到大排序
userList5.stream().sorted(Comparator.comparing(User::getAge).reversed())
.sorted(Comparator.comparing(User::getUserId)).collect(Collectors.toList());
System.out.println("----------------统计--------");
//找出最小的年龄的值
int age=userList5.stream().mapToInt(User::getAge).min().orElse(0);
//找出年龄最小的那个user对象
User user=userList5.stream().min(Comparator.comparing(User::getAge)).orElse(null);
//找出年龄在30岁和50岁之间的列表
userList5.stream().filter(s1->s1.getAge()>=30).filter(s1->s1.getAge()<=50).collect(Collectors.toList());
//找出最大的年龄的值
int maxgae=userList5.stream().mapToInt(User::getAge).max().orElse(0);
//找出年龄最大的那个user对象
User maxUser=userList5.stream().max(Comparator.comparing(User::getAge)).orElse(null);
//计算出所有的年龄的总和
int sumage=userList5.stream().mapToInt(User::getAge).sum();
//计算出所有年龄的平均值
double avgage=userList5.stream().mapToInt(User::getAge).average().orElse(0);
//检查列表中年龄是不是都大于60
boolean havingAll60=userList5.stream().allMatch(user1 -> user1.getAge()>60);
//检查列表中的年龄是不是存在60岁的人
boolean havingAny60=userList5.stream().anyMatch(user1 -> user1.getAge()>60);
//检查列表中必须没有60岁的才行
boolean havingNo60=userList5.stream().noneMatch(user1 -> user1.getAge()>60);
//查找出列表中年龄,所有的年龄都减少10岁
List<Integer> userNewAgeList=userList5.stream().map(user1->user1.getAge()-10).collect(Collectors.toList());
//去掉重复对象
List<User> userList1=userList5.stream().distinct().collect(Collectors.toList());
//年龄60岁的用户只留下一个
List<User> userList10=StreamEx.of(userList5).distinct(user1 -> user1.getAge()>60).toList();
//计算所有人的年龄的总和
int sumage2=userList5.stream().mapToInt(User::getAge).sum();
//另外一种计算所有人的年龄的总和
int sumage3=userList5.stream().map(User::getAge).reduce(Integer::sum).orElse(0);
//将列表中的姓名用,分开
String s=userList5.stream().map(User::getName).collect(Collectors.joining(","));
//将查出来的大于60岁的人的姓名写在list<String>中
List<String> nameList=userList5.stream().filter(user1 -> user1.getAge()>60).map(User::getName).collect(Collectors.toList());
//将查出来的大于60岁的人的姓名写在set<User>中
Set<User> userSet=userList5.stream().filter(user1 -> user1.getAge()>60).collect(Collectors.toSet());
//将查出来的大于60岁的人的姓名放在vector<String>中
Vector<String> stringVector = userList5.stream().filter(user1 -> user1.getAge() > 60).map(User::getName).collect(Collectors.toCollection(Vector::new));
//将查出来的大于60岁的人的姓名和年龄放在Map<String,Object> 中
Map<String, Integer> userHa=userList5.stream().filter(user1 -> user1.getAge()>60).collect(Collectors.toMap(User::getName,User::getAge));
//统计列表中大于60岁的人的个数
Long count=userList5.stream().filter(user1 -> user1.getAge()>60).count();
//统计列表中大于60岁的人的个数
LongSummaryStatistics countLongSummaryStatistics=userList5.stream().filter(user1 -> user1.getAge()>60).collect(Collectors.summarizingLong(User::getAge));
System.out.println("countLongSummaryStatistics ==="+countLongSummaryStatistics);
System.out.println("countLongSummaryStatistics count ==="+countLongSummaryStatistics.getCount());
LongSummaryStatistics countLongSummaryStatistics2=userList5.stream().filter(user1 -> user1.getAge()>60).mapToLong(User::getAge).summaryStatistics();
DoubleSummaryStatistics cou = userList5.stream().filter(user1 -> user1.getAge()>60).mapToDouble(User::getAge).summaryStatistics();
System.out.println("countLongSummaryStatistics ==="+cou);
System.out.println("countLongSummaryStatistics count ==="+cou.getCount());
//将list<User> 按照年龄大于30岁分为两个分区,
Map<Boolean, List<User>> userListMap=userList5.stream().collect(Collectors.partitioningBy(user1 -> user1.getAge()>30));
System.out.println("大于30岁的userList"+userListMap.get(true));
System.out.println("小于30岁的userList"+userListMap.get(false));
//按照奇数偶数分组进行分组
Map<Object,List<User>> booleanListMap= userList5.stream().collect(Collectors.groupingBy(user1 -> user1.getAge()%2==0));
System.out.print("按照年龄岁数的奇数偶数分组"+booleanListMap);
//启动多个线程计算
Map<Object,List<User>> booleanListMap2=userList5.stream().parallel().collect(Collectors.groupingBy(user1 -> user1.getAge()%2==0));
System.out.print("按照年龄岁数的奇数偶数分组"+booleanListMap2);
//启动多个线程计算
userList5.parallelStream().collect(Collectors.groupingBy(user1 -> user1.getAge()%2==0));
//从txt文件中读取用户人员的姓名
Files.lines(Paths.get("E://names.txt")).collect(Collectors.toList()).forEach(System.out::println);
//将list列表中找出年龄是奇数的人,并把他的姓名转化为大写
List<String> userList11=userList5.stream().filter(s1->s1.getAge()%2!=0).map(user1->{
return user1.getName().toLowerCase();
}).collect(Collectors.toList());
//假如查询出来的list<User>取出来的值为null,避免流造成异常
User user12=userList5.stream().findFirst().orElse(null);
}
public static List<User> createUserList(int count){
List<User> userList=new ArrayList<>();
for(int i=1;i<=count;i++){
User user=new User();
user.setAge(i%100);
user.setUserId(i);
user.setName(i+"name");
userList.add(user);
}
return userList;
}
public static List<User> createUserList(int startAge,int endAge){
List<User> userList=new ArrayList<>();
for(int i=startAge;i<=endAge;i++){
User user=new User();
user.setAge(i);
user.setUserId(i);
user.setName(i+"name");
userList.add(user);
}
return userList;
}
}
User类
import lombok.Data;
@Data
public class User {
private int userId;
private String name;
private int age;
}
Employee 类
import lombok.Data;
@Data
public class Employee {
private int employeeId;
private String userName;
private int salary;
}