如何处理List <元组>

时间:2015-12-04 16:20:05

标签: java list

晚上好 我使用倒排索引来存储包含该单词的文件名的单词 使用HashMap:Map <String,List<String>> 例如:

Home : doc1,doc2,doc3 

现在我想进行位置索引,将单词存储为key,这次不仅存储文件名,而且文件名和#of时间单词出现在文件中,并显示在文件中的位置

<fname,freq,postion1,position2,position3>

例如:

java : doc1,3,4,8,30 

java在doc1中出现3次,位置4 8 30 所以我谷歌如何做这样的事情

我发现了Tuple class,所以我的hashMap就像

 public Map <String,List<Tuple>> positionIn=new HashMap<>();

和我的Tuple class

public class Tuple {
        private String filepath;
        private int wordfreq;
        private List <Integer> position;

        private Tuple(String filepath, int wordfreq,List position) {
            this.filepath = filepath;
            this.wordfreq=wordfreq;
            this.position = position;
        }

        public List<Integer> getPosition(){return position; }
        public String getfilePath(){return filepath;}
        public int getfreq(){return wordfreq;}

        @Override
        private boolean equals(Object o) {
             if (!(o instanceof Tuple)) return false;
             Tuple t = (Tuple) o;
             return this.filepath.equals(t.fname());
        }
}

我的问题是:

如何处理这个元组列表例如 列表中的contains方法是正确的 list.contains(fname)list.contains(position)

以及如何分别获取其元素?

1 个答案:

答案 0 :(得分:0)

根据评论中的要求,我将此作为答案添加:

您希望能够通过以下方式区分元组:

  • 文件名
  • 出现(因为不同的出现意味着文件中的不同单词)

因此你的equals方法也应该比较两个列表。这可以通过list1.containsAll(list2)&amp;&amp; list2.containsAll(list1)

对于list.contains(x),您需要x成为Tuple的实例,因为list的类型为List<Tuple>
因此,为了确定您的列表是否包含“/my/path/myFile.txt”,您需要list.contains(new Tuple("/my/path/myFile.txt", 0, null))