/** * Sort table */ protected void sort() { if (comparator == null) { comparator = Stream.concat( Stream.concat( getPrimaryComparator() != null ? Stream.of(getPrimaryComparator()) : Stream.<Comparator<Row>>empty(), getSortKeys().stream().filter(sk -> sk != null && sk.getSortOrder() != SortOrder.UNSORTED).map(this::getComparatorFromSortKey) ), Stream.of(getFallbackComparator()) ).reduce(comparator, (result, current) -> result != null ? result.thenComparing(current) : current); } viewToModel.clear(); int rowCount = model.getRowCount(); viewToModel.ensureCapacity(rowCount); for (int i = 0; i < rowCount; i++) { viewToModel.add(new Row(i)); } Collections.sort(viewToModel, comparator); updateModelToView(); }
/** * fill in modelToView list with index of view */ protected void updateModelToView() { modelToView = new int[viewToModel.size()]; for(int i=0; i<viewToModel.size();i++) { modelToView[viewToModel.get(i).getIndex()] = i; } } }
public Object getValue() { return getModel().getObjectListAsList().get(getIndex()); }
public Object getValueAt(int column) { return getModel().getValueAt(getIndex(), column); } }
@SuppressWarnings({ "rawtypes", "unchecked" }) protected Comparator<Row> getComparatorFromSortKey(SortKey sortkey) { Comparator comp = getValueComparator(sortkey.getColumn()); if (sortkey.getSortOrder() == SortOrder.DESCENDING) { comp = comp.reversed(); } Function<Row,Object> getValueAt = (Row row) -> row.getValueAt(sortkey.getColumn()); return Comparator.comparing(getValueAt, comp); }
@Override public int convertRowIndexToModel(int index) { if (!isSorted()) { return index; } validate(); return viewToModel.get(index).getIndex(); }