boolean isSorted() { for (int i = 1; i < size; i++) { if (!(array[i].compareTo(array[i - 1]) > 0)) return false; } return true; }
private List<Entry> decodeSlice(final Map<String, AttributeValue> item) { final List<Entry> entries = new EntryBuilder(item).buildAll(); final Entry sliceStartEntry = StaticArrayEntry.of(sliceQuery.getSliceStart(), BufferUtil.emptyBuffer()); final Entry sliceEndEntry = StaticArrayEntry.of(sliceQuery.getSliceEnd(), BufferUtil.emptyBuffer()); final List<Entry> filteredEntries = new ArrayList<>(entries.size()); for (Entry entry : entries) { if (entry.compareTo(sliceStartEntry) >= 0 && entry.compareTo(sliceEndEntry) < 0) { filteredEntries.add(entry); } } return filteredEntries.subList(0, Math.min(filteredEntries.size(), sliceQuery.getLimit())); }
public List<Entry> buildAll() { if (null == item) { return Collections.emptyList(); } final Entry sliceStartEntry; final Entry sliceEndEntry; if (slice) { sliceStartEntry = StaticArrayEntry.of(start, BufferUtil.emptyBuffer()); sliceEndEntry = StaticArrayEntry.of(end, BufferUtil.emptyBuffer()); } else { sliceStartEntry = null; sliceEndEntry = null; } //TODO(amcp) Arrays.parallelSort(filteredEntries)? //https://github.com/awslabs/dynamodb-titan-storage-backend/issues/159 return item.entrySet().stream() .map(entry -> { final StaticBuffer columnKey = decodeKey(entry.getKey()); final AttributeValue valueValue = entry.getValue(); final StaticBuffer value = decodeValue(valueValue); return StaticArrayEntry.of(columnKey, value); }) .filter(entry -> !slice || entry.compareTo(sliceStartEntry) >= 0 && entry.compareTo(sliceEndEntry) < 0) .sorted() .limit(limit) .collect(Collectors.toList()); }