按字母顺序对字符串数组进行排序

时间:2019-04-14 22:20:08

标签: java arrays string sorting java-7

我编写了以下工作代码。我相信它可以做得更好或更有效,但是我不太确定如何进行。

我最不满意的是三个替换。

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 个答案:

答案 0 :(得分:2)

由于您使用的是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());

答案 1 :(得分:0)

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中,并且每个项目之间的| < / p>

或者,如果您需要对已排序列表进行其他操作,则可以对其进行排序,然后在以下部分进行流处理:

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

答案 2 :(得分:0)

如前所述,Java 8 Stream API提供了许多实用程序来执行此类任务,但是,如果您希望使用循环来保持解决方案,并且希望避免三个替换,而不是调用{ {1}},然后清理它,您应该在构建toString()

时循环列表中的项目
String

请注意,打印结果时请切出最后三个字符,以避免打印Tast1 | Task2 | Task3 String result = ""; for (String item : test) { result += item + " | "; } System.out.println(result.substring(0, result.length() - 3);