我们如何在键不重复的列表中添加弹性搜索结果(searchResponse)键和值

时间:2015-07-30 10:23:55

标签: java elasticsearch

如何在列表中添加弹性搜索结果(searchResponse)键和值,我们不希望列表中出现重复键?因为我们想从函数中返回一个列表。

      for (int i = 0; i < hits.totalHits(); i++) {      
                responseFields = (Map<String, Object>) hits.getAt(i).getSource();
                Student st=new Student();       
             Iterator it = responseFields.entrySet().iterator();
                 while (it.hasNext()) {
                     Map.Entry pair = (Map.Entry)it.next();
//use list here
                System.out.println(pair.getKey() + " = " + pair.getValue()+);
}}

在这种情况下,每次我们为每个for循环迭代得到重复键。根据要求,我应该将结果保存在一个包含单个键的列表中。它可以在表格表示中生成标题。

1 个答案:

答案 0 :(得分:2)

Set几乎就是你想要的。这是一个列表,特别是不允许重复(这是一个粗略的过度简化)。

      Set uniqueValues = new HashSet<Entry>();
      for (int i = 0; i < hits.totalHits(); i++) {      
                responseFields = (Map<String, Object>) hits.getAt(i).getSource();
                Student st=new Student();       
             Iterator it = responseFields.entrySet().iterator();
                 while (it.hasNext()) {
                     Map.Entry pair = (Map.Entry)it.next();
                    uniqueValues.add(pair);
//use list here

}}

这应该有效,但前提是对键和值都必须是唯一的。

编辑:我刚看到你需要做一些事情,如果你得到重复。为此,您可以使用uniqueValues.contains()方法。它会告诉你它是否已经在集合中。所以:

if(!uniqueValues.contains(pair))
     uniqueValues.add(pair)
else addToTableOrSomething

如果您只想让键具有唯一性,可以使用Map。它允许你只在键上做cointains()。

      Map uniqueValues = new HashMap<Something, Somthing>();
      for (int i = 0; i < hits.totalHits(); i++) {      
                responseFields = (Map<String, Object>) hits.getAt(i).getSource();
                Student st=new Student();       
             Iterator it = responseFields.entrySet().iterator();
                 while (it.hasNext()) {
                     Map.Entry pair = (Map.Entry)it.next();
                    if(!uniqueeValues.contains(pair.getKey())
                       uniqueValues.put(pair.getKey(), pair.getValue());
                    else doSomthingElse

//use list here

}}