【问题标题】:Sorting an array of strings alphabetically按字母顺序对字符串数组进行排序
【发布时间】:2019-04-14 22:20:08
【问题描述】:

我已经编写了以下工作代码。我相信它可以做得更好或更高效,但我不太确定如何继续。

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

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 |任务2 | Task3,很好。

请不要犹豫,问任何问题,我超级响应。

【问题讨论】:

标签: java arrays string sorting java-7


【解决方案1】:

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

【讨论】:

  • 非常感谢您的回答。这正是我想要的,但不幸的是我使用的是 Java 7。您还有其他建议吗?
  • 编辑显示如何在不使用流的情况下连接字符串。
  • 再次感谢您!我比以前更喜欢这个
  • 编辑为使用更简单的for 语法。
  • String.join(…) 是一种 Java 8 方法。
【解决方案2】:

正如所指出的,Java 8 Stream API 提供了许多实用程序来执行这些任务,但是如果您想使用循环来保持您的解决方案并且想要避免三个替换,而不是调用 toString()在列表上然后清理它,您应该在构建String时循环列表中的项目@

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

请注意,您打印结果时会去掉最后三个字符以避免打印 Tast1 |任务2 |任务3|

【讨论】:

  • 很遗憾我使用的是 Java 7。您还有其他建议吗?
  • 为 String 构建提供的代码对 Java7 有效,但您应该检查 Jason 的响应。 String.join 更加简洁干净。仅将我的回复视为手动执行相同操作的方式。
  • 这种手动方式无法绕过,因为String.join 也是 Java 8 方法,即使它不使用流。但我会考虑使用StringBuilder
【解决方案3】:

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);

这将在列表中创建String 中的Stream,对它们进行排序,然后将它们加入String,并在每个项目之间添加|

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

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

【讨论】:

  • 很遗憾我使用的是 Java 7。您还有其他建议吗?
  • 当您使用流时,请始终如一地使用它们,即String result = user.getTasks().stream().map(t -&gt; t.getTask().toString()).sorted().collect(Collectors.joining("|"));
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-21
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
相关资源
最近更新 更多