获得评级最低的对象的最佳方法
Best way to get an object with a lowest rating
我有一个对象列表,想要获得得分最低的人对象。
我对流媒体主题比较陌生,正在考虑什么是处理它的最佳方式。
public class Person {
private String id;
private List<Rating> ratingList;
}
public class Rating {
private String rating;
private LocalDate ratingDate;
}
我有一项服务可以从数据库中获取带有评级的 Person 对象列表。
首先,我将列表分组以列出具有评级的人员
Map<String, List<Rating>> groupedList
然后我将其映射为仅具有最新评级的人员对象列表
groupedList.entrySet().stream.map(element -> new Person(element.getKey(), element.getValue().stream().max(Comparator.comparing(Rating::getRatingDate)).stream().collect(Collectors.toList())))
这里的问题是,当我已经有了一个具有最新评级的人列表时,最好的方法是只返回一个评级最低的人。
我正在考虑使用 .reduce() 方法,但我总是得到一个包含初始列表中所有人的列表
这里是关于如何实现的完整功能示例。不同之处在于我将评级更改为 int
以便于比较。然而,将它适应 String
类型应该不难。
这段代码的重要部分是
persons.stream().min((e1, e2) -> e1.ratingList.stream().min((o1, o2) -> o1.rating - o2.rating).get().rating
- e2.ratingList.stream().min((o1, o2) -> o1.rating - o2.rating).get().rating).get()
它的作用是根据最低评分比较人,找到评分最低的人。
另一种方法需要一个附加字段,您可以将最低评分映射到该字段。这种方法看起来更干净,也可能性能更高:
persons.stream()
.map(e -> t.new Person(e.id, e.ratingList.stream().min((o1, o2) -> o1.rating - o2.rating).get().rating))
.min((e1, e2) -> e1.lowestRating - e2.lowestRating).get()
我改编的类是:
class Person {
private String id;
private List<Rating> ratingList;
private int lowestRating;
public Person() {
}
public Person(String id2, int rating) {
id = id2;
lowestRating = rating;
}
}
class Rating {
private int rating;
private LocalDate ratingDate;
Rating(int rating, LocalDate date) {
this.rating = rating;
ratingDate = date;
}
}
我有一个对象列表,想要获得得分最低的人对象。 我对流媒体主题比较陌生,正在考虑什么是处理它的最佳方式。
public class Person {
private String id;
private List<Rating> ratingList;
}
public class Rating {
private String rating;
private LocalDate ratingDate;
}
我有一项服务可以从数据库中获取带有评级的 Person 对象列表。
首先,我将列表分组以列出具有评级的人员
Map<String, List<Rating>> groupedList
然后我将其映射为仅具有最新评级的人员对象列表
groupedList.entrySet().stream.map(element -> new Person(element.getKey(), element.getValue().stream().max(Comparator.comparing(Rating::getRatingDate)).stream().collect(Collectors.toList())))
这里的问题是,当我已经有了一个具有最新评级的人列表时,最好的方法是只返回一个评级最低的人。 我正在考虑使用 .reduce() 方法,但我总是得到一个包含初始列表中所有人的列表
这里是关于如何实现的完整功能示例。不同之处在于我将评级更改为 int
以便于比较。然而,将它适应 String
类型应该不难。
这段代码的重要部分是
persons.stream().min((e1, e2) -> e1.ratingList.stream().min((o1, o2) -> o1.rating - o2.rating).get().rating
- e2.ratingList.stream().min((o1, o2) -> o1.rating - o2.rating).get().rating).get()
它的作用是根据最低评分比较人,找到评分最低的人。
另一种方法需要一个附加字段,您可以将最低评分映射到该字段。这种方法看起来更干净,也可能性能更高:
persons.stream()
.map(e -> t.new Person(e.id, e.ratingList.stream().min((o1, o2) -> o1.rating - o2.rating).get().rating))
.min((e1, e2) -> e1.lowestRating - e2.lowestRating).get()
我改编的类是:
class Person {
private String id;
private List<Rating> ratingList;
private int lowestRating;
public Person() {
}
public Person(String id2, int rating) {
id = id2;
lowestRating = rating;
}
}
class Rating {
private int rating;
private LocalDate ratingDate;
Rating(int rating, LocalDate date) {
this.rating = rating;
ratingDate = date;
}
}