Codewars Java练习:Your order, please

题目

Your task is to sort a given string. Each word in the String will contain a single number. This number is the position the word should have in the result.

Note: Numbers can be from 1 to 9. So 1 will be the first word (not 0).

If the input String is empty, return an empty String. The words in the input String will only contain valid consecutive numbers.

For an input: “is2 Thi1s T4est 3a” the function should return “Thi1s is2 3a T4est”

题解

数字的提取可以使用正则表达式(java.util.regex)完成,提取出数值之后,按照数值排序,这里需要使用自定义比较器,自定义比较器的一种做法是直接实例化Comparator接口。代码如下——

当然,如果觉得类的重载MyCmp显得有些多余,Java支持了类的匿名重载,可以将比较器的定义实现在order函数内,代码变成了——

在完成排序之后,将数组转换为stream,方便后续处理,stream支持reduce函数,reduce函数传入合并两项的lambda表达式,返回一个Optional<T>类,Optional<T>类实在T的基础上,增加了一个表示是否为null的指示符,在这里,我们不需要关心为null的情况,故直接使用Optional<T>.get()得到最终答案。

不过笔者确实很傻逼,别人一行能解决的事情自己写了那么久——

 

原创文章地址:【Codewars Java练习:Your order, please】,转载时请注明出处mhy12345.xyz

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.