3 回答
TA贡献1866条经验 获得超5个赞
也许是这样的:
Optional<YourObject> optional = test.stream().
filter(object -> (object.status.matches("[1-7]"))).sorted((o1, o2) -> Integer.valueOf(o2.status).compareTo(Integer.valueOf(o1.status))).findFirst();
String value = optional.isPresent() ? optional.get().status : "XYZ";
TA贡献1815条经验 获得超10个赞
它会是这样的:
String regex = "[1-7]";
int max = 0;
int number;
for (Object obj : objectList){
if(obj.status().matches(regex)){
number = Integer.valueOf(obj.status());
if(number > max){
max=number;
}
}
}
if(max==0){
System.out.println("XYZ");}
else{
System.out.println(String.valueOf(max));
}
TA贡献1796条经验 获得超4个赞
这是一个经典的reduce算法。(没有必要的强制转换和正则表达式。)
BinaryOperator<String> reducer = (v1, v2) -> {
if (v1.length() == 1 && v1.compareTo("1") >= 0 && v1.compareTo("7") <= 0) {
// v1 is a number - return v2 if higher number, else v1
return v2.length() == 1 && v2.compareTo("1") >= 0 && v2.compareTo("7") <= 0 && v1.compareTo(v2) < 0 ? v2 : v1;
} else {
// v1 is not a number - return v2 if number, else "XYZ"
return v2.length() == 1 && v2.compareTo("1") >= 0 && v2.compareTo("7") <= 0 ? v2 : "XYZ";
}
};
测试:
Stream<String> of1 = Stream.of("3", "1", "2");
Stream<String> of2 = Stream.of("1", "incomplete", "2");
Stream<String> of3 = Stream.of("incomplete", "status");
System.out.println(of1.reduce(reducer).get()); // 3
System.out.println(of2.reduce(reducer).get()); // 2
System.out.println(of3.reduce(reducer).get()); // XYZ
添加回答
举报