gpt4 book ai didi

java - 根据给定输入值列表对对象列表进行排序

转载 作者:行者123 更新时间:2023-12-02 08:39:56 25 4
gpt4 key购买 nike

我有一个值对象,其结构如下:

class MyValueObject {
String travellerName;
List<String> countryTags;

// Getters and setters
}

在此,我维护一份旅行者列表以及他们访问过的国家/地区。例如

Richard -> India, Poland, Australia

John -> US, Australia, Maldives

Emma -> US

现在我添加了一个过滤功能,它将提供访问过选定国家/地区的所有旅行者的列表。

将提供国家/地区列表作为输入。

List<String> countryFilter;

此过滤器具有多选选项。

过滤结果应包含 AND 和 OR 结果。

也就是说,如果输入是美国和澳大利亚,结果将是:

John -> US, Australia, Maldives

Richard -> India, Poland, Australia

Emma -> US

结果应按 AND 匹配项显示在 OR 匹配项上方的方式排序。

问题:

我应该如何对匹配项进行排序?

我要写一个比较器吗?如果是的话,一些例子将会非常有帮助。

请提出建议。

谢谢。

最佳答案

试试这个:

构建对象。

List<Traveler> travelers = new ArrayList<>();
Traveler t1 = new Traveler();
t1.traveler = "Richard";
t1.countries = List.of("India", "Poland", "Australia");
travelers.add(t1);

t1 = new Traveler();
t1.traveler = "John";
t1.countries = List.of("US", "Australia", "Maldives");
travelers.add(t1);


t1 = new Traveler();
t1.traveler = "Emma";
t1.countries = List.of("US");
travelers.add(t1);

过滤器

List<String> countryFilter = List.of("US", "Maldives");

测试谓词。这些是问题的核心。

  • 它们都会传输countryFilter并检查这些
    国家/地区是否在旅行过的国家/地区列表中。
  • or 如果旅行者所在国家/地区至少包含一个国家/地区,则返回 true
  • 如果旅行者所在的国家/地区包含所有国家/地区,
  • and 返回 true。
Predicate<Traveler> or = t -> countryFilter.stream()
.anyMatch(cc -> t.countries.contains(cc));

Predicate<Traveler> and = t -> countryFilter.stream()
.allMatch(cc -> t.countries.contains(cc));

现在只需流式传输旅行者对象
并应用过滤器。然后打印结果。

System.out.println("Filtering on: " + countryFilter);
System.out.println("\nVisited all of the countries");
travelers.stream().filter(and)
.forEach(t -> System.out.println(t.traveler));
System.out.println("\nVisited some of the countries");
travelers.stream().filter(or)
.forEach(t -> System.out.println(t.traveler));

打印

Filtering on: [US, Maldives]

Visited all of the countries
John

Visited some of the countries
John
Emma

类支持类

class Traveler {
String traveler;
List<String> countries;

public String toString() {
return traveler + " => " + countries.toString();
}
}

关于java - 根据给定输入值列表对对象列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61443590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com