如何在列表中添加弹性搜索结果(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循环迭代得到重复键。根据要求,我应该将结果保存在一个包含单个键的列表中。它可以在表格表示中生成标题。
答案 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
}}