为了账号安全,请及时绑定邮箱和手机立即绑定

如何在java中执行此循环

如何在java中执行此循环

喵喔喔 2021-10-13 16:48:52
我有n个对象,它们有一个名为 status 的属性。所以我必须检查所有对象的这个属性,并为所有对象提供一个值。让我解释。status 属性可以有这样的值(字符串)-“1”、“2”、“3”、“4”、“5”、“7”、“已完成”、“未完成”…… .(除 1..7 之外的任何字符串)我将遍历所有对象,如果任何对象的状态属性值为 1-7,则将选择较高的一个,然后将选择该值。 例子obj1.status="1", obj2.status="6"。选择的值="6"obj1.status="4", obj2.status="2"。选定的值="4"obj1.status="7", obj2.status="6"。选定的值="7"如果没有对象的状态属性为 1-7 ,则选择的值将是“XYZ” 示例obj1.status="已完成",obj2.status="abc"。选定的值="XYZ"obj1.status="abc", obj2.status="def"。选定的值="XYZ"obj1.status="jkl", obj2.status="mno"。选定的值="XYZ"如果至少一个对象的状态属性为 1-7,其余所有对象都有其他字符串,则将选择数字值。obj1.status="abc", obj2.status="1"。选定的值="1"obj1.status="abc", obj2.status="5",obj3.status="4",. 选定的值="5"
查看完整描述

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";


查看完整回答
反对 回复 2021-10-13
?
动漫人物

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));

}


查看完整回答
反对 回复 2021-10-13
?
慕的地8271018

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


查看完整回答
反对 回复 2021-10-13
  • 3 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信