Bueno, si alguien tiene una idea estaría muy thankfull. Estoy en una corriente de Java y me gustaría para ordenar mi lista que voy a volver. Tengo que ordenar la lista a través de TradPrefis (MiObjeto :: getTradPrefix). Pero esto sería demasiado fácil. Porque quiero ordenar siguiendo el número al final de TradPrefix exampleTradPrefix_ [NÚMERO DE ORDENAR]
Ejemplo: hello_1 test_2 ... still_there_22
Aquí es una pieza de código que usted pueda imaginar más fácil.
public LinkedHashSet<WsQuestion> get(String quizId, String companyId) {
LinkedHashSet<QuizQuestionWithQuestion> toReturn = quizQuestionRepository.findAllQuizQuestionWithQuestionByQuizId(quizId);
return (toReturn.stream()
.map(this::createWsQuestion)
.sorted(comparing(WsQuestion::getTradPrefix.toString().length()))
.collect(Collectors.toCollection(LinkedHashSet::new)));
}
Si donde yo simplemente poner un método en la WsQuestion
clase, vamos a llamarlo el orden de clasificación:
public int getSortOrder() {
return Integer.valueOf(tradPrefix.substring(tradPrefix.lastIndexOf("_") + 1));
}
El Integer
se necesita de análisis ya que comparan cadenas daría "11" < "2" (gracias Holger por señalar esto). Las lastIndexOf()
asegura de que cualquier número de guiones están permitidos en tradPrefix
, siempre que haya al menos una.
A continuación, basta con crear una comparotor mediante el uso de Comparator.comparingInt()
public LinkedHashSet<WsQuestion> get(String quizId, String companyId) {
LinkedHashSet<QuizQuestionWithQuestion> toReturn = quizQuestionRepository.findAllQuizQuestionWithQuestionByQuizId(quizId);
return (toReturn.stream()
.map(this::createWsQuestion)
.sorted(comparingInt(WsQuestion::getSortOrder))
.collect(Collectors.toCollection(LinkedHashSet::new)));
}