package com.css.xtbgcloudnbgl.test;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.apache.commons.compress.utils.Lists;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
-
@Module xtbg-cloud
-
@Package com.css.xtbgcloudnbgl.test
-
@Description Java8中stream流的collectingAndThen方法应用实例
-
@Author Mjj
-
@Date 2022-09-23 14:30
-
@Version 1.0
-
@Reviewer 审核人
-
@History 修订历史(历次修订内容 、 修订人 、 修订时间等)
*/
public class StreamCollctions {@Data
public static class ExportTemperatureDto{
private String name;
private Double morningTemperature;
private Double afternoonTemperature;
private String classId;
private String gradeId;
private Integer personId;public ExportTemperatureDto(Integer personId,String name) { this.name = name; this.personId = personId; }
}
@Data
@AllArgsConstructor
public static class User {
//用户Id
int userId;
//用户姓名
String userName;
//用户工资
Double salary;
}public static void main(String[] args) {
//判断是否为Y boolean b = Stream.of(nbglLgsqEntity).allMatch(vo -> "Y".contains(vo.getYxbz())); /**此方法是在进行归纳动作结束之后,对归纳的结果进行二次处理。 去重id*/ ArrayList<ExportTemperatureDto> collect = addExport().stream().collect( Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(ExportTemperatureDto::getPersonId))), ArrayList::new)); collect.stream().forEach(System.out::println); /**查询工资最高的员工 的 姓名*/ String collect1 = addUser().stream().collect( Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparing(User::getSalary)), (Optional<User> user) -> user.map(User::getUserName).orElse("员工为空"))); System.out.println(collect1); /**计算用户工资的平均值*/ Double collect2 = addUser().stream().collect(Collectors.collectingAndThen(Collectors.averagingDouble(User::getSalary), Double::doubleValue)); System.out.println(collect2); /**计算员工工资的求和*/ double sum = addUser().stream().mapToDouble(User::getSalary).sum(); System.out.println(sum); /**最值*/ Double aDouble = addUser().stream().map(User::getSalary).min(Double::compareTo).get(); System.out.println(aDouble); Double aDouble1 = addUser().stream().map(User::getSalary).max(Double::compareTo).get(); System.out.println(aDouble1); String[] givenList = {"a", "bb", "ccc", "dd"}; List<String> result = Arrays.asList(givenList).stream().collect(Collectors.toList()); System.out.println(result);
}
public static List addExport() {
ArrayList exp = Lists.newArrayList();
exp.add(new ExportTemperatureDto(1,“haha”));
exp.add(new ExportTemperatureDto(2,“haha”));
exp.add(new ExportTemperatureDto(3,“haha”));
exp.add(new ExportTemperatureDto(4,“haha”));exp.add(new ExportTemperatureDto(1,"hahass")); exp.add(new ExportTemperatureDto(2,"hahass")); return exp;
}
public static List addUser() {
//数据准备
User user1 = new User(1, “hangman”, 100d);
User user2 = new User(1, “list”, 200d);
User user3 = new User(2, “wing”, 200d);
User user4 = new User(2, “zeal”, 100d);
User user5 = new User(3, “tuba”, 300d);
List userList = new ArrayList<>();
userList.add(user1);
userList.add(user2);
userList.add(user3);
userList.add(user4);
userList.add(user5);
return userList;
}
}
stream返回boolean
// org.springframework.boot.logging.LoggingSystem
/**
* Detect and return the logging system in use. Supports Logback and Java Logging.
* @param classLoader the classloader
* @return the logging system
*/
public static LoggingSystem get(ClassLoader classLoader) {
String loggingSystem = System.getProperty(SYSTEM_PROPERTY);
if (StringUtils.hasLength(loggingSystem)) {
if (NONE.equals(loggingSystem)) {
return new NoOpLoggingSystem();
}
return get(classLoader, loggingSystem);
}
return SYSTEMS.entrySet()
// 获取流对象
.stream()
// 过滤
.filter((entry) -> ClassUtils.isPresent(entry.getKey(), classLoader))
// 映射
.map((entry) -> get(classLoader, entry.getValue()))
// 返回第一个值
.findFirst()
// 不存在则抛出异常
.orElseThrow(() -> new IllegalStateException("No suitable logging system located"));
}
// org.springframework.boot.env.SpringApplicationJsonEnvironmentPostProcessor
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
MutablePropertySources propertySources = environment.getPropertySources();
propertySources.stream()
// 映射
.map(JsonPropertyValue::get)
// 过滤掉空值
.filter(Objects::nonNull)
// 查找第一个(预期结果最多为一个的情况)
.findFirst()
// 如果存在值 则进行处理 不存在 则不产生影响
.ifPresent((v<