如果我们使用foreach循环时,并使用lambda表达式进行代码的业务逻辑实现时,我们不能抛异常,针对这种情况,个人写了个工具类,来是我们的异常可以正常抛出去
1.工具类如下
package com.seage.tjsafety.common.util.commonUtils;
import com.seage.commons.exception.SeageException;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
/**
* @author 王涛涛
* @date 2018/8/7 14:02
*/
public class StreamUtils {
public static <T,R> List<R> map(List<T> list, Function<T,R> function){
return list.stream().map(function).collect(Collectors.toList());
}
public static <T> List<T> sort(List<T> list, Comparator<T> comparator){
return list.stream().sorted(comparator).collect(Collectors.toList());
}
public static <T> List<T> filter(List<T> list, Predicate<T> predicate){
return list.stream().filter(predicate).collect(Collectors.toList());
}
public static <T>T max(List<T> list,Predicate<T> predicate,Comparator<? super T> comparator){
Optional<T> max = list.stream().filter(predicate).max(comparator);
return max.orElse(null);
}
public static <T> Consumer<T> throwingConsumerWrapper(ThrowConsumer<T,Exception> consumer){
return i-> {
try {
consumer.accept(i);
}catch (SeageException e){
throw e;
} catch (Exception e) {
throw new RuntimeException(e);
}
};
}
}
2.使用方式如下:
interchangeDataDto.getRampDataDtos().forEach(StreamUtils.throwingConsumerWrapper(rampDataDto -> {
if(CollectionUtils.isEmpty(rampDataDto.getStandardAcrossDataDtos()
)){
throw new SeageDataException(ConstantUtils.ERROR_CODE_PARAMS,"匝道标准横断面数据不能为空","interchangeData");
}
}
}));