@SuppressWarnings("unchecked") public static List<Criterion> sortByTypeAndName( Collection<? extends Criterion> criterions) { List<Criterion> result = new ArrayList<Criterion>(criterions); Collections.sort(result, ComparatorUtils.chainedComparator(byType, byName)); return result; }
/** * Compares two objects (that implement ElementInterface) by name according to the rules for the * compare method. * * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ public int compare(Object o1, Object o2) { // Get a null comparator that is backed by a static "natural" comparator Comparator c = ComparatorUtils.nullLowComparator(null); // convert o1 and o2 into the string names when not null Object no1 = (o1 == null) ? null : ((ElementInterface) o1).getName(); Object no2 = (o2 == null) ? null : ((ElementInterface) o2).getName(); // let the null comparator handle possible null values, where null < non-null string return c.compare(no1, no2); }
@SuppressWarnings({"unchecked", "rawtypes"}) public static void main(String[] args) { List<User> list = new ArrayList<User>(); list.add(new User(2, "姚郁", 28)); list.add(new User(1, "孟志昂", 25)); list.add(new User(3, "矿宗义", 30)); list.add(new User(4, "王仕强", 25)); System.out.println("-----排序前-----"); for (User u : list) { System.out.println(u.name + "/" + u.age); } System.out.println("-----满足:先按age升序排列,再按id降序排列-----"); List sortFields = new ArrayList(); Comparator mycmp = ComparableComparator.getInstance(); mycmp = ComparatorUtils.reversedComparator(mycmp); sortFields.add(new BeanComparator("age")); sortFields.add(new BeanComparator("id", mycmp)); ComparatorChain multiSort = new ComparatorChain(sortFields); Collections.sort(list, multiSort); for (User u : list) { System.out.println(u.id + "/" + u.name + "/" + u.age); } }
private void init() throws ExcepcionAplicacion { _vista = EJBL.getVistaFuncionFacade().find(_id, true); if (_vista == null) { throw new ExcepcionAplicacion(Bitacora.getTextoMensaje(CBM.VISTA_NO_DISPONIBLE, _nombre)); } _nombre = _vista.getNombre(); _from = from(_select); if (StringUtils.isBlank(_from)) { // vista "{0}" no tiene origen throw new ExcepcionAplicacion( Bitacora.getTextoMensaje(CBM.ERROR_COMANDO_SELECT_VISTA_1, _nombre)); } _where = where(_select); _columnas = new ArrayList<>(_vista.getVistaFuncionColByVistaCollection()); _columnasOcultas = new ArrayList<>(); _grupos = new ArrayList<>(); _agregaciones = new ArrayList<>(); VistaFuncionColPorSecuencia c1 = new VistaFuncionColPorSecuencia(); VistaFuncionColPorId c2 = new VistaFuncionColPorId(); Comparator<VistaFuncionColBase> comparator = (Comparator<VistaFuncionColBase>) ComparatorUtils.chainedComparator(c1, c2); Collections.sort((List<VistaFuncionColBase>) _columnas, comparator); boolean parametrosRestringidos = TLC.getControlador().esFuncionConParametrosRestringidos(_vista.getFuncion().getIdFuncion()); String codigoDominio = _vista.getFuncion().getIdDominio().getCodigoDominio(); TipoAgregacionBase agregacion; TipoAgregacionEnumeration tipoAgregacion; VistaFuncionColBase grupo; String alias; String propertyColumn; Long propertySelect; boolean parametroAutorizado; for (VistaFuncionColBase vistaFuncionCol : _columnas) { agregacion = vistaFuncionCol.getAgregacion(); tipoAgregacion = agregacion == null ? null : TipoAgregacionEnumeration.valueOf(agregacion.getNumero()); grupo = vistaFuncionCol.getGrupo(); alias = vistaFuncionCol.getAlias(); if (parametrosRestringidos) { propertyColumn = BaseBundle.getPropertyColumn(codigoDominio, alias); propertySelect = BaseBundle.getPropertySelect(codigoDominio, alias); parametroAutorizado = propertyColumn == null || propertySelect == null || TLC.getControlador().esParametroAutorizado(propertyColumn, propertySelect); } else { parametroAutorizado = true; } if (parametroAutorizado) { if (tipoAgregacion != null) { if (TipoAgregacionEnumeration.GRUPO.equals(tipoAgregacion)) { if (grupo != null && vistaFuncionCol.getId().equals(grupo.getId())) { _grupos.add(vistaFuncionCol); _ultimo = vistaFuncionCol; } } else { _agregaciones.add(vistaFuncionCol); } } _orden |= BitUtils.valueOf(vistaFuncionCol.getOrden()); } else { _columnasOcultas.add(vistaFuncionCol); } } if (_columnasOcultas.isEmpty()) { if (_columnas.isEmpty()) { // vista "{0}" no tiene columnas throw new ExcepcionAplicacion( Bitacora.getTextoMensaje(CBM.ERROR_COMANDO_SELECT_VISTA_2, _nombre)); } switch (_tipo) { case DETALLE: if (_grupos.isEmpty()) { } else if (_agregaciones.isEmpty()) { // vista "{0}" no tiene agregaciones throw new ExcepcionAplicacion( Bitacora.getTextoMensaje(CBM.ERROR_COMANDO_SELECT_VISTA_4, _nombre)); } break; case GRAFICO: if (_grupos.isEmpty()) { // vista "{0}" no tiene grupos throw new ExcepcionAplicacion( Bitacora.getTextoMensaje(CBM.ERROR_COMANDO_SELECT_VISTA_3, _nombre)); } if (_agregaciones.isEmpty()) { // vista "{0}" no tiene agregaciones throw new ExcepcionAplicacion( Bitacora.getTextoMensaje(CBM.ERROR_COMANDO_SELECT_VISTA_4, _nombre)); } agregacion = null; for (VistaFuncionColBase vistaFuncionCol : _agregaciones) { if (BitUtils.valueOf(vistaFuncionCol.getGraficable())) { continue; } agregacion = vistaFuncionCol.getAgregacion(); tipoAgregacion = TipoAgregacionEnumeration.valueOf(agregacion.getNumero()); TLC.getBitacora() .error( CBM.COLUMNA_NO_GRAFICABLE, vistaFuncionCol.getNombre(), tipoAgregacion.getLabel()); } if (agregacion != null) { throw new ExcepcionAplicacion( Bitacora.getTextoMensaje(CBM.VISTA_NO_GRAFICABLE, _nombre)); } break; case RESUMEN: if (_agregaciones.isEmpty()) { // vista "{0}" no tiene agregaciones throw new ExcepcionAplicacion( Bitacora.getTextoMensaje(CBM.ERROR_COMANDO_SELECT_VISTA_4, _nombre)); } break; } } else { for (VistaFuncionColBase vistaFuncionCol : _columnasOcultas) { TLC.getBitacora().error(CBM.COLUMNA_NO_AUTORIZADA, vistaFuncionCol.getNombre()); } throw new ExcepcionAplicacion(Bitacora.getTextoMensaje(CBM.VISTA_NO_AUTORIZADA, _nombre)); } if (_orden) { } else { // vista "{0}" no tiene orden TLC.getBitacora().warn(CBM.ERROR_COMANDO_SELECT_VISTA_5, _nombre); } _vistaValida = true; }