所以我有三个重要的因素,文件名有很多,也会有重复,违规类型有6个,以及与之相关的数据。
我正在考虑使用Map,但它只接受两种类型,所以我想按文件名对数据进行排序,对于该文件名下的每个条目,我想从我想要的内容中检索违规类型从数据中检索所有匹配,所以说它是我可以说map.get(文件名,违规)的地图,它将检索与之匹配的所有结果。
是否有可以让我这样做的数据结构?或者我是否懒惰,应该在输出数据时自己对数据进行排序。
答案 0 :(得分:0)
您可以为mapkey使用自定义类,其中包含两个字段filename和违规类型。这样做时你需要实现equals()和hashCode()方法确保该类的实例可以用作map的键。
答案 1 :(得分:0)
您可以使用TreeMap
。 TreeMap
根据其键的自然顺序排序。
TreeMap<String, List<String>> map = new TreeMap<String, List<String>>();
答案 2 :(得分:0)
另一种方法是使用自定义类来保存所需的数据。基本上“构建”您可以迭代的自己的节点。
例如!您可以创建以下类对象:(Node.java)
import java.util.*;
public class Node
{
private String violationType;
private String dataInside;
public Node()
{
this("", "");
}
public Node(String violationType)
{
this(violationType, "");
}
public Node(String violationType, String dataInside)
{
this.violationType = violationType;
this.dataInside = dataInside;
}
public void setViolationType(String violationType)
{
this.violationType = violationType;
}
public void setDataInside(String dataInside)
{
this.dataInside = dataInside;
}
public String getViolationType()
{
return violationType;
}
public String getDataInside()
{
return dataInside;
}
}
好的,很好,所以我们有一些'节点'的东西,包括一些setter,一些getter和一些易于使用的构造函数。凉。现在让我们看看如何使用它:
import java.util.*;
public class main{
public static void main(String[] args){
Map<String, Node> customMap = new HashMap<String, Node>();
customMap.put("MyFilename", new Node("Violation 1", "Some Data"));
System.out.println("This is a test of the custom Node: " + customMap.get("MyFilename").getViolationType());
}
}
现在我们有一张地图可以将您需要的所有数据联系起来。现在,当涉及到这样的事情时,你会得到很多人说'不要重新发明轮子',因为内置库更加优化。这是真的!如果你能找到一个构建的数据结构进入适合您需求的java,使用它。这总是一个很好的政策。据说,如果你有一个非常自定义的情况,有时它需要一个自定义的方法。不要害怕自己做这样的对象,用Java很容易,它可以节省你很多时间和头痛!
修改强>
因此,在重新阅读OP的问题之后,我意识到你需要一个给定文件名给定违规的相关数据的完整列表。在这种情况下,您可以将private String dataInside
切换为类似private ArrayList<String> dataInside;
的内容,这样您就可以将所需数据关联到仍然位于该节点内部的arraylist内部。还要注意,你必须稍微调整一下getter / setter来容纳一个列表,但这并不算太糟糕。