You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将包含'm'的字符串排在数组前列?现有排序结果相反

解决Java数组按是否包含'm'排序时顺序相反的问题

你遇到的问题根源在于Boolean类型的自然排序规则:false的优先级低于true(即false < true)。当你用s.contains("m")作为排序Key时,不含'm'的元素返回false,含'm'的返回true,自然会把不含'm'的排在前面,含'm'的挤到末尾。

给你几个可行的解决办法:

方法1:反转比较器顺序

直接对原比较器调用reversed()方法,反转排序逻辑:

String[] strArray = {"xyz", "aaazzz","abc","mft","gh","j", "aaazaz", "mm", "am"};

Arrays.sort(strArray, Comparator.comparing((s) -> s.contains("m")).reversed());
System.out.println("Array sorted by 'm': " + Arrays.toString(strArray));

输出结果:

Array sorted by 'm': [mft, mm, am, xyz, aaazzz, abc, gh, j, aaazaz]

方法2:自定义整数排序Key

把含'm'的元素标记为0,不含的标记为1,利用整数的自然排序让0(含'm')排在前面:

Arrays.sort(strArray, Comparator.comparingInt(s -> s.contains("m") ? 0 : 1));

这个写法更直观,和方法1效果完全一致。

方法3:利用indexOf()实现(含扩展排序)

如果想用indexOf(),可以利用它的返回值特性:含'm'的元素返回索引值(>=0),不含的返回-1。通过调整Key既能实现基础排序,还能扩展更精细的规则:

// 仅按是否含'm'排序,含'm'在前
Arrays.sort(strArray, Comparator.comparingInt(s -> s.indexOf('m') == -1 ? 1 : 0));

// 进阶:含'm'的在前,且按'm'首次出现的位置从早到晚排序
Arrays.sort(strArray, Comparator.comparingInt(s -> s.indexOf('m') == -1 ? Integer.MAX_VALUE : s.indexOf('m')));

进阶写法的输出会是[mft, am, mm, xyz, aaazzz, abc, gh, j, aaazaz],因为mft中'm'在索引0,比am的索引1更靠前。

内容的提问来源于stack exchange,提问作者Marcus3w

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 02:15:41