Privada regla de ordenación en una corriente de Java

Jules Spender:

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)));
}
Magnilex:

Si donde yo simplemente poner un método en la WsQuestionclase, vamos a llamarlo el orden de clasificación:

public int getSortOrder() {
  return Integer.valueOf(tradPrefix.substring(tradPrefix.lastIndexOf("_") + 1));
}

El Integerse 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)));
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=178409&siteId=1
Recomendado
Clasificación