如何在java中执行此循环

我有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"


喵喔喔
浏览 135回答 3
3回答

心有法竹

也许是这样的: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";

动漫人物

它会是这样的:String regex = "[1-7]";int max = 0;int number;for (Object obj : objectList){&nbsp; if(obj.status().matches(regex)){&nbsp; &nbsp; &nbsp; number = Integer.valueOf(obj.status());&nbsp; &nbsp; &nbsp; if(number > max){&nbsp; &nbsp; &nbsp; &nbsp; max=number;&nbsp; &nbsp; &nbsp;}&nbsp; }}if(max==0){&nbsp; System.out.println("XYZ");}&nbsp;else{&nbsp; System.out.println(String.valueOf(max));}

慕的地8271018

这是一个经典的reduce算法。(没有必要的强制转换和正则表达式。)BinaryOperator<String> reducer = (v1, v2) -> {&nbsp; &nbsp; if (v1.length() == 1 && v1.compareTo("1") >= 0 && v1.compareTo("7") <= 0) {&nbsp; &nbsp; &nbsp; &nbsp; // v1 is a number - return v2 if higher number, else v1&nbsp; &nbsp; &nbsp; &nbsp; return v2.length() == 1 && v2.compareTo("1") >= 0 && v2.compareTo("7") <= 0 && v1.compareTo(v2) < 0 ? v2 : v1;&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; // v1 is not a number - return v2 if number, else "XYZ"&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; return v2.length() == 1 && v2.compareTo("1") >= 0 && v2.compareTo("7") <= 0 ? v2 : "XYZ";&nbsp; &nbsp; }};测试: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()); // 3System.out.println(of2.reduce(reducer).get()); // 2System.out.println(of3.reduce(reducer).get()); // XYZ
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java