Сортировка массива строк по алфавиту - PullRequest
0 голосов
/ 15 апреля 2019

Я написал следующий рабочий код. Я верю, что это можно сделать лучше или эффективнее, но я не совсем уверен, как это сделать.

Главное, чем я недоволен - это три замены.

ArrayList<String> test = new ArrayList<String>(); 
for (int i = 0; i < user.getTasks().size(); i++) {
    test.add(user.getTasks.get(i).getTask().toString());
}
Collections.sort(test);
System.out.println(test.toString().replace(",", " |").replace("[", "").replace("]", ""));

Вывод выглядит примерно так: Tast1 | Task2 | Task3 и это хорошо.

Пожалуйста, не стесняйтесь задавать любые вопросы, я очень отзывчив.

Ответы [ 3 ]

2 голосов
/ 15 апреля 2019

Поскольку вы используете Java 7, а потоки недоступны, вы можете:

  1. использовать более простой синтаксис for (при условии, что user.getTasks() возвращает список Task объектов - заменить Task с вашим классом, если нет)
  2. цикл через строки, объединяя их с разделителем

ArrayList<String> test = new ArrayList<String>(); 
for (Task task : user.getTasks()) {
    test.add(task.getTask().toString());
}
Collections.sort(test);

// make a string of the values with a pipe separator
StringBuilder valuesToPrint = new StringBuilder();
for (int index = 0; index < test.size(); index++) {
    if (index > 0) {
        valuesToPrint.append(" | ");
    }
    valuesToPrint.append(test);
}

System.out.println(valuesToPrint.toString());
0 голосов
/ 15 апреля 2019

Как указывалось, Java 8 Stream API предоставляет множество утилит для выполнения подобных задач, но если вы хотите сохранить свое решение с помощью циклов и хотите избежать трех замен вместо вызова toString() в списке и затем очистить его, вы должны зациклить элементы в списке при построении String

String result = "";
for (String item : test) {
    result += item + " | ";
}
System.out.println(result.substring(0, result.length() - 3);

Обратите внимание, что вы печатаете результат, вырезая последние три символа, чтобы избежать печати Tast1 | Task2 | Задача3 |

0 голосов
/ 15 апреля 2019

Java 8+ вы можете упростить это как:

List<String> test = new ArrayList<String>(); 
String result = user.getTasks().stream()
                               .map(t -> t.getTask().toString())
                               .sorted()
                               .collect(Collectors.joining("|"));
System.out.println(result);

, который создаст Stream из String в списке, отсортирует их, а затем объединит их в String с | между каждым элементом

Или, если вам нужно выполнить другие операции с отсортированным списком, вы можете отсортировать его, а затем выполнить часть потока после:

Collections.sort(test);
String result = test.stream().collect(Collectors.joining("|"));
...