简体   繁体   中英

Sorting List of Arrays by different elements using Java 8 lambdas

如果我有一个List<String[]> ,其中每个String[]如下所示:{FirstName,LastName,Income,City}我将如何使用Java 8 lambdas按列表对某个值进行排序,例如收入或名字?

Here's a couple examples. Replace x in the first two examples below with the index of the field you'd like to use for sorting.

Collections.sort(personList, (p1, p2) -> p1[x].compareTo(p2[x]));

or

personList.sort((p1, p2) -> p1[x].compareTo(p2[x]);

Also, I agree with @Robin Topper's comment. If lambdas are required (and you wanted to sort by first name), you could use:

Collections.sort(personList, (p1, p2) -> p1.getFirstName().compareTo(p2.getFirstName()));

or

personList.sort((p1, p2) -> p1.getFirstName().compareTo(p2.getFirstName()));

Also consider using the comparable implementation from Robin's comment and a data-structure allowing sorting.

If you can rely on the order in this array, then as simple as:

List<String[]> list = Arrays.asList(new String[] { "eugene", "test", "300", "LA" }, 
                              new String[] { "hunter", "test2", "25", "CA" });

 List<String[]> sorted = list.stream()
            .sorted(Comparator.comparingLong(s -> Long.parseLong(s[2])))
            .collect(Collectors.toList());

    sorted.forEach(s -> System.out.println(Arrays.toString(s)));

But the general advice to create an Object from those fields is much better.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM