0

我正在尝试遍历关联数组并计算每个组合有多少个实例(用于确定给定的条件A概率B

例如,在 PHP 中,我可以遍历给定输入的索引数组 $Data[i](A, ~B)并得到 2 的结果。

$Data[0] = array("A", "~B");
$Data[1] = array("~A", "B");
$Data[2] = array("A", "~B");
$Data[3] = array("A", "B");

我尝试在 Java 中使用 复制它maps,但映射只允许每个值有一个唯一的键......所以下面的方法不起作用,因为键A被用于三个条目。

map.put("A", "~B");
map.put("~A", "B");
map.put("A", "~B");
map.put("A", "B");

还有什么我可以使用的吗?

谢谢!

4

2 回答 2

1

您可以使用 a Map<T,List<U>>(在您的情况下是Map<String,List<String>>),或者您可以使用 aMultimap<String,String>使用某些库,例如 guava (或它的 apache commons 版本 - MultiMap

于 2013-07-10T18:01:09.647 回答
0

如果结构的迭代是您的主要目标,aList<ConditionResult>似乎是最适合您的情况的选择,其中 ConditionResult 如下所示。

如果保持组合计数是唯一目标,那么 aMap<ConditionResult,Integer>也可以很好地工作。

public class ConditionResult
{
    // Assuming strings for the data types,
    // but an enum might be more appropriate.
    private String condition;
    private String result;

    public ConditionResult(String condition, String result)
    {
        this.condition = condition;
        this.result = result;
    }

    public String getCondition() { return condition; }
    public String getResult() { return result; }

    public boolean equals(Object object)
    {
        if (this == object) return true;
        if (object == null) return false;
        if (getClass() != object.getClass()) return false;
        ConditionResult other = (ConditionResult) object;
        if (condition == null)
        {
            if (other.condition != null) return false;
        } else if (!condition.equals(other.condition)) return false;
        if (result == null)
        {
            if (other.result != null) return false;
        } else if (!result.equals(other.result)) return false;

        return true;
    }

    // Need to implement hashCode as well, for equals consistency...

}


迭代和计数可以如下完成:

/**
 * Count the instances of condition to result in the supplied results list
 */
public int countInstances(List<ConditionResult> results, String condition, String result)
{
    int count = 0;
    ConditionResult match = new ConditionResult(condition,result);
    for (ConditionResult result : results)
    {
        if (match.equals(result)) count++;
    }

    return count;
}
于 2013-07-10T18:23:37.020 回答