@Override public InternalFacet buildFacet(String facetName) { if (facets.v().isEmpty()) { facets.close(); return new InternalLongTermsFacet( facetName, comparatorType, size, ImmutableList.<InternalLongTermsFacet.LongEntry>of(), missing, total); } else { LongIntOpenHashMap facetEntries = facets.v(); final boolean[] states = facets.v().allocated; final long[] keys = facets.v().keys; final int[] values = facets.v().values; if (size < EntryPriorityQueue.LIMIT) { EntryPriorityQueue ordered = new EntryPriorityQueue(shardSize, comparatorType.comparator()); for (int i = 0; i < states.length; i++) { if (states[i]) { ordered.insertWithOverflow(new InternalLongTermsFacet.LongEntry(keys[i], values[i])); } } InternalLongTermsFacet.LongEntry[] list = new InternalLongTermsFacet.LongEntry[ordered.size()]; for (int i = ordered.size() - 1; i >= 0; i--) { list[i] = (InternalLongTermsFacet.LongEntry) ordered.pop(); } facets.close(); return new InternalLongTermsFacet( facetName, comparatorType, size, Arrays.asList(list), missing, total); } else { BoundedTreeSet<InternalLongTermsFacet.LongEntry> ordered = new BoundedTreeSet<>(comparatorType.comparator(), shardSize); for (int i = 0; i < states.length; i++) { if (states[i]) { ordered.add(new InternalLongTermsFacet.LongEntry(keys[i], values[i])); } } facets.close(); return new InternalLongTermsFacet(facetName, comparatorType, size, ordered, missing, total); } } }