我有一个字符串列表 def123,abc999,zzz000,abc123,zzz111 。 我希望列表排序,使前三个字符按升序排序,接下来三个按降序排序。 所以输出应该是 abc999,abc123,def123,zzz111,zzz000 这可能吗?
答案 0 :(得分:7)
其他答案建议您实施list.sort(Comparator
.comparing(s -> s.substring(0, 3))
.thenComparing(s -> s.subtring(3, 6), Comparator.reverseOrder()));
。 Java 8中的接口添加了最近的实用程序方法,不再需要这样做了:
List
另请注意,sort
现在有{{1}}方法。
答案 1 :(得分:2)
是的,有可能。您必须自己编写Comparator
。这是一个帮助您入门的教程https://www.tutorialspoint.com//java/java_using_comparator.htm
答案 2 :(得分:1)
将字符串分成两个子字符串,然后使用window.scrollY
进行排序。这样的事情:Demo
comparator
答案 3 :(得分:0)
您应该创建一个自定义类,其中包含String
作为属性。该类应该实现Comparable接口。
在自定义类中,您必须覆盖从compareTo(T o)
接口继承的方法Comparable
。你应该在那里应用你的排序逻辑。
然后,如果使用该自定义类作为对象类型创建Collection
(例如:List<CustomClass>
),则可以使用Collections.sort(list)方法对该List进行排序。
可以找到一个完整的示例here。
答案 4 :(得分:-1)
如果您想要更多算法方法,请查看:https://jsfiddle.net/5adpqgrc/1/
// start with ['def123', 'abc999', 'zzz000', 'abc123', 'zzz111']
var strings = ['def123', 'abc999', 'zzz000', 'abc123', 'zzz111']
$('body').append(strings.join(' ') + '<br>')
// reverse the digits
// get this ['def876', 'abc000', 'zzz999', 'abc876', 'zzz888']
strings = reverse_digits_only(strings)
$('body').append(strings.join(' ') + '<br>')
// sort it
// get this ['abc000', 'abc876', 'def876', 'zzz888', 'zzz999']
strings = strings.sort()
$('body').append(strings.join(' ') + '<br>')
// reverse the digits again
// get this ['abc999' 'abc123' 'def123' 'zzz111' 'zzz000']
strings = reverse_digits_only(strings)
$('body').append(strings.join(' ') + '<br>')
function reverse_digits_only (strings) {
return strings.map(function (string) {
var first_three_letters = string.substring(0, 3)
var reversed_digits = string.substring(3).split('').map(function (digit) {
return 9 - digit
})
return first_three_letters + reversed_digits.join('')
})
}
这是如何运作的: