首页 > 解决方案 > 查找和更改元组值

问题描述

我已经像这样制作了一些元组:

public GreenhouseControls() {
        light = new Tuple<>("light", "off");
        fans = new Tuple<>("fans", "off");
        water = new Tuple<>("water", "off");
        power = new Tuple<>("power", "on");
        window = new Tuple<>("window", "good");
        thermostat = new Tuple<>("thermostat","day");
}

我正在尝试setVariable()在同一类中使用一个方法,该方法将接收 2 个字符串(例如,“light”和“on”),并使用第一个字符串来搜索元组的第一个变量以及匹配时发现它会用第二个字符串替换第二个变量。我尝试将元组添加到 ArrayList 但我无法让搜索部分工作。有没有办法通过 aArrayList或 a来实现这一点HashSet


元组类:

   public static class Tuple<A,B> {
        public final A eventName;
        public final B status;

        public Tuple(A eventName, B status) {
            this.eventName = eventName;
            this.status = status;
        }

        public String toString() {
            return "(" + eventName + ", " + status + ")";
        }
    }

标签: javaarraylisttuples

解决方案


更简单的方法是HashMap按照 hev1 的建议使用您的要求。但是,如果您仍然想使用Tuple该类,那么这是一种方法。

将 getter 方法添加到您的Tuple

public class Tuple<A,B> {
    public final A eventName;
    public final B status;

    public Tuple(A eventName, B status) {
        this.eventName = eventName;
        this.status = status;
    }

    public String toString() {
        return "(" + eventName + ", " + status + ")";
    }

    public A getEventName() {
        return eventName;
    }

    public B getStatus() {
        return status;
    }
}

然后在 a 中收集所有元组List并将其传递给您的setVariable方法。在此方法中,只需检查给定eventName值是否存在于任何元组中。如果是,则从列表中删除该元组并创建一个具有给定状态的新元组并将其添加回列表中。像这样的东西:

void setVariable(String eventName, String status, List<Tuple>tuples) {
    boolean isRemoved = tuples.removeIf(tuple -> tuple.getEventName().equals(eventName));
    if(isRemoved) {
        Tuple tuple = new Tuple(eventName, status);
        tuples.add(tuple);
    }
}

希望这可以帮助。


推荐阅读