如何按流中的值按字母顺序对键值数组进行排序? (爪哇)

问题描述 投票:0回答:2

我正在尝试了解有关比较器和流的更多信息,我想知道使用键值对对象数组进行排序的最佳解决方案,按值的字母顺序排序。非常感谢任何帮助!

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"},

]

在流中使用它的确切语法有点麻烦(使用流随后过滤并返回名称数组)。如果更容易,也可以在之后过滤数组。

java arrays sorting java-stream comparator
2个回答
0
投票

您可以使用

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

0
投票

具有如下定义的

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
© www.soinside.com 2019 - 2024. All rights reserved.