我正在尝试了解有关比较器和流的更多信息,我想知道使用键值对对象数组进行排序的最佳解决方案,按值的字母顺序排序。非常感谢任何帮助!
Example Array:
[
{key: "93743743", value: "Mary Smith"},
{key: "6624c357", value: "Tom Spitz"},
{key: "03453459", value: "John Doe"},
{key: "24623145", value: "Ernie Ball"}
]
Expected Result:
[
{key: "24623145", value: "Ernie Ball"}
{key: "03453459", value: "John Doe"},
{key: "93743743", value: "Mary Smith"},
{key: "6624c357", value: "Tom Spitz"},
]
在流中使用它的确切语法有点麻烦(使用流随后过滤并返回名称数组)。如果更容易,也可以在之后过滤数组。
您可以使用
Arrays.sort
并将其与 Comprarator.comparing
组合以按字母顺序对值进行排序。
Arrays.sort(objects, Comparator.comparing(o -> o.value));
示例代码:
import java.util.Arrays;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
Object[] objects = {
new Object("93743743", "Mary Smith"),
new Object("6624c357", "Tom Spitz"),
new Object("03453459", "John Doe"),
new Object("24623145", "Ernie Ball")
};
Arrays.sort(objects, Comparator.comparing(o -> o.value));
for (Object object : objects) {
System.out.println(object.key + ": " + object.value);
}
}
static class Object {
String key;
String value;
Object(String key, String value) {
this.key = key;
this.value = value;
}
}
}
或者你也可以使用
Arrays.stream
Stream<Object> stream = Arrays.stream(objects);
stream.sorted(Comparator.comparing(o -> o.value))
.forEach(o -> System.out.println(o.key + ": " + o.value));
输出:
24623145: Ernie Ball
03453459: John Doe
93743743: Mary Smith
6624c357: Tom Spitz
具有如下定义的
MyObject
数组:
record MyObject(String key, String value) {}
您可以使用
Comparator.comparing
和方法参考来排序它。
MyObject[] res = Arrays.stream(arr)
.sorted(Comparator.comparing(MyObject::value)).toArray(MyObject[]::new);
// or your getter may be named as MyObject::getValue