如何将y变量与对象数组中的所有y变量进行比较?

时间:2017-04-07 00:15:32

标签: java

以防万一,这将转化为:

robots[0].y == y?
robots[1].y == y?
robots[2].y == y? 

等...

与x相同的事情。

我知道必须有这样做的方法,但我的语法很糟糕。这是我尝试过的:

if(robots[].y == y && robots[].x == x){
        //SOMETHING HAPPENS
}

5 个答案:

答案 0 :(得分:0)

如果robots数组包含基本类型(或自动装箱类型)数据,则可以使用==符号, 但是,如果机器人包含机器人,则必须使用equals方法,除非您想要比较两个参考对象,否则您还需要使用==符号。

for(int i=0;i<robots.length;i++)
   if (robots[i]== y ) // To compare primitives or objects reference

for(int i=0;i<robots.length;i++)
   if (robots[i].equals (y )) // To compare objects

答案 1 :(得分:0)

使用Java 8+ Stream(s)您可能会检查每个机器人r是否匹配(allMatch

if (Stream.of(robots).allMatch(r -> r.x == x && r.y == y)) {
    //SOMETHING HAPPENS
}

或许您打算做一些 机器人匹配的事情,在这种情况下filter。例如,打印,如

Stream.of(robots).filter(r -> r.x == x && r.y == y).forEach(System.out::println);

答案 2 :(得分:0)

使用循环遍历数组。我假设你的数组中有y个元素。我不知道是什么,所以我将在这个例子中使用一个int。如果您发表评论我可以帮助您,如果y是不同的数据类型。比较更高级的数据类型通常不使用&#34; ==&#34;

int y = 0; //set y equal to whatever integer you want to check
for(int i = 0; i < robots.size; i++){
    if(robots[i] == y){
        //something happens

    }

}

答案 3 :(得分:0)

你可以使用这样的东西,你唯一需要添加的是for循环:

//robot is your object type    
robot robots[]; // assuming you set values for this guy
robot _compare;

_compare.x = 5;
_compare.y = 10;

for (robot rob: robots)
    if (rob.y == _compare.y && rob.x == _compare.x)
        // Do something

答案 4 :(得分:0)

您可以选择通过实用程序类使用反射。

import java.lang.reflect.Field;

public final class Util {

    public static boolean equalsAll(Object[] array, String fieldName, Object keyField) {

        boolean result = false;
        for (Object item : array) {
            // get class variables
            Field[] fields = item.getClass().getDeclaredFields();
            for (Field field : fields) {

                // check for field-name
                if (!field.getName().equals(fieldName)) { 
                    continue;
                }

                try {
                    // check for object equality
                    field.setAccessible(true);
                    Object object = field.get(item);
                    if (object != null && object.equals(keyField)) {
                        result = true;
                        continue;
                    }
                } catch (Exception e) {

                }

            }

            if (!result) {
                return false; // no matching field name/type.
            }

        }

        return result;
    }
}

示例语法/用法:

if(Util.equalsAll(robots, "y", y) && Util.equalsAll(robots, "x", x)) {
   //do something
}