自定义排序,A 位于 a 之前,B 位于 b 之前

2023-12-23

我有一个这样的颜色列表:

粉色、蓝色、红色、蓝色、灰色、绿色、紫色、黑色...等

List<String> listOfColors =  Arrays.asList("Pink", "Blue", "Red", "blue", "Grey", "green", "purple", "black");

有一些中间操作,例如过滤一些水果颜色,现在我留下过滤结果,我希望它们按顺序排序:

蓝色、黑色、蓝色、灰色、绿色、粉色、紫色、红色

我努力了 :

List<String> collect = listOfColors.stream().sorted(String::compareToIgnoreCase)
        .collect(Collectors.toList());

它没有按预期工作。

输出如下:

黑色、蓝色、蓝色、绿色、灰色、粉色、紫色、红色

我想要以下内容:

蓝色、黑色、蓝色、灰色、绿色、粉色、紫色、红色


您可以使用基于规则的校对器 https://docs.oracle.com/javase/7/docs/api/java/text/RuleBasedCollator.html定义您自己的规则。

的例子custom rule:

String rules = "< c,C < b,B";

上述规则被解码为大写和小写C的 都出现在大写和小写之前B比较的时候 字符串。

String customRules = "<A<a<B<b<C<c<D<d<E<e<F<f<G<g<H<h<I<i<J<j<K<k<L<l<M<m<N<n<O<o<P<p<Q<q<R<r<S<s<T<t<U<u<V<v<X<x<Y<y<Z<z";
RuleBasedCollator myRuleBasedCollator = new RuleBasedCollator(customRules);
Collections.sort(listOfColors,myRuleBasedCollator);
System.out.println(listOfColors);

Output:

[Blue, black, blue, Grey, green, Pink, purple, Red]

Edit:而不是写customRules您可以手动使用以下代码来生成它。

String a = IntStream.range('a', 'z' + 1).mapToObj(c -> Character.toString((char) c))
        .flatMap(ch -> Stream
            .of("<", ch.toUpperCase(), "<", ch)).collect(Collectors.joining(""));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义排序,A 位于 a 之前,B 位于 b 之前 的相关文章

随机推荐

  • 在.net框架中测试

    我创建了一个针对 NET Framework 4 6 1 的单元测试项目 测试显示在测试资源管理器中 并在 Visual Studio 2017 中正常运行 我想设置一个构建过程 所以我想从命令行运行测试 我尝试使用 mstest 但这没有
  • 詹金斯正在重新启动,请稍候 - 等待很长时间

    我更新了一些插件并重新启动了詹金斯 但现在它说 Jenkins 正在重新启动 请稍候 当 Jenkins 准备就绪时 您的浏览器将自动重新加载 花费了太多时间 从最后 40 分钟开始等待 我只有 1 个项目 大约有 20 个版本 我已经重新
  • Tkinter - 使用自动换行计算文本小部件中的行数

    我想知道如何获取启用自动换行的 Tkinter Text 小部件中的行数 在此示例中 文本小部件中有 3 行 from Tkinter import root Tk text Text root width 12 height 5 wrap
  • 我从 .ssh 文件夹中删除了known_hosts 文件,并且无法在 BitBucket 存储库中拉取或推送

    我犯了一个错误 删除了 ssh 文件夹中的 known hosts 文件 现在我无法在 BitBucket 存储库中拉取或推送 我该如何解决 尝试执行 ssh T email protected cdn cgi l email protec
  • 从第二个 ViewController 返回到第一个 ViewController

    我正在构建一个当前有 3 个 ViewController 的应用程序 其中之一是在成功登录后使用的 因此与这个问题无关 当我发现 Storyboard 无法提供所需的精细控制时 我混合使用 Storyboard 并以编程方式构建内容 第一
  • 使用打字稿模板将 create-react-app 更新到 4.0 时出错

    我要更新react scripts到下一个版本 4 0 0 这样我就可以使用本指南使用快速刷新功能here https gist github com iansu 282dbe3d722bd7231fa3224c0f403fa1 但是当重新
  • 金字塔 postgresql 连接

    我对金字塔完全陌生 我正在尝试开发一个同时使用金字塔和 postgresql 的应用程序 但我对如何配置 sripts 目录中的initializedb py 文件 尤其是初始化数据库 完全感到困惑 我正在使用 PostgreSQL 9 1
  • 在android布局中layout_height =“0dip”的效果/含义是什么

    我见过几个使用的例子 android layout height 0px 或 0dip 但我不明白这样做的影响 看起来这会使布局高度为 0 像素 该值是否有所减轻 但还有一些其他因素 例如 重量 或任何父视图的高度 是的 你对重量的看法是正
  • Twig 将内容附加到块

    在树枝模板中 是否可以将内容附加到块中 例如 请考虑下面的模板文件 布局 html twig block content endblock content 内部 html twig block css a color fff body ba
  • 通过Python suds在JIRA中创建问题时设置受让人字段

    使用 JIRA 版本 4 2 使用 Python 2 7 和 suds 0 4 如何创建受让人字段集的问题 下面的代码中将忽略受让人字段 new issue client service createIssue auth project N
  • 使用Webpack将Vue暴露到全局

    我正在使用旧版 Rails 应用程序 该应用程序已部分迁移为使用 Webpacker 和 Vue 我们还有一个通过 CDN 加载的遗留脚本 该脚本也需要使用 Vue 但是 我们不想将 Vue 捆绑到其中 而只使用旧版 Rails 应用程序中
  • GNU Make 支持文件名中的“%”吗?

    在 GNU Make 中 是否可以依赖包含以下内容的文件 在文件名中 我有这样的事情 foo results 10 dat gnuplot config plt 虽然我当然可以选择不同的文件名 但很高兴知道是否 应该始终避免 或者是否有一种
  • Slurm:为什么在 sbatch 中使用 srun?

    在 sbatch 脚本中 您可以直接启动程序或脚本 例如可执行文件myapp 但在许多教程中人们使用srun myapp反而 尽管阅读了有关该主题的一些文档 我不明白其中的区别以及何时使用这些语法 我希望这个问题足够精确 SO的第一个问题
  • 如何从密钥库列出/导出私钥?

    如何列出并从密钥库导出私钥 您可以使用 Java6 和 OpenSSL 从密钥库中提取私钥 这一切都取决于 Java 和 OpenSSL 都支持 PKCS 12 格式的密钥库这一事实 要进行提取 您首先使用keytool转换为标准格式 确保
  • 用于编译 GUI 表单的 Ant 任务(Intellij IDEA)

    如何在 Intellij IDEA 中创建 Ant 任务来编译 GUI 表单 XML 我在项目中使用 Scala 和 Java Java仅用于GUI类 我使用Intellij IDEA UI Designer创建它 请不要打败我 但在设置
  • 原始 SQL 请求中的 Rails 4 字符串插值

    在不进行插值的情况下重写此查询的最佳方法是什么 def case joins type subquery lt lt SQL squish SELECT id FROM cases c2 WHERE c2 title id titles i
  • MySQL基于不同时间级别的热门行

    我有 2 张桌子 photo and like 我正在尝试根据一天内的点赞数来获取热门照片 所以基本上是这样的 今天流行 SELECT p id AS id COUNT li id AS total likes FROM photo p L
  • 如何在不使用 select 的情况下检查(查看)Perl 中管道数据的 STDIN?

    我正在尝试处理没有参数和管道数据传递到 Perl 脚本的可能性 我假设如果没有参数 则输入将通过 STDIN 进行管道传输 但是 如果用户未提供任何参数并且未将任何内容通过管道传递给脚本 它将尝试获取键盘输入 我的目标是提供错误消息 很遗憾
  • 如何在不重新启动 Tomcat 的情况下重新加载属性文件

    我使用以下方法从类路径加载属性文件 String cheminFichier new StringBuilder 100 append classeBP getPackage getName replace append File sepa
  • 自定义排序,A 位于 a 之前,B 位于 b 之前

    我有一个这样的颜色列表 粉色 蓝色 红色 蓝色 灰色 绿色 紫色 黑色 等 List