gpt4 book ai didi

java - 根据属性对不同列表中的对象进行分类

转载 作者:行者123 更新时间:2023-11-30 07:50:33 25 4
gpt4 key购买 nike

我在使用 interest 属性对不同列表中的对象进行分类时遇到问题。

我有一个用户对象列表作为列表,我的用户类如下所示:

class User {
private int id;
private String name;
private String interest;
//constructors, getters & setters etc...
}

我正在尝试根据某种兴趣来显示用户,但我觉得除了我尝试过的方法之外,还有一种更简单的方法可以做到这一点。

我需要兴趣列表是动态的,而不是在 switch 中使用一组固定的元素,而且我不知道是否有更好、更有效的方法,而不必使用 3 个 lists 每个兴趣列表。

这是我到目前为止所做的:

List<User> javaInterestList;
List<User> javascriptInterestList;
List<User> cInterestList;

public void category(List<User> unfilteredList) {
for (User u : unfilteredList) {
String interest = u.getInterest().toLowerCase();
switch (interest) {
case "java":
javaInterestList.add(u);
break;
case "c":
cInterestList.add(u);
break;
case "javascript":
javascriptInterestList.add(u);
break;
}
}
}

上面的问题,我只限于 3 个兴趣,有什么办法可以解决这个问题,以及更好、更干净的方法吗?

最佳答案

这里要考虑的不是过滤机制,而是使用的data-structure

在这种情况下,您正在分配具有特定兴趣()的不同类型的用户。这是 map 的完美用例。

我认为你只需要在以下情况下使用 map 。

The problem in the above that I'm restricted to only 3 interests, Is there any way to solve this problem

当然你可以根据自己的喜好对兴趣进行分类,看看下面的方法:

public static Map<String,List<User>> category(List<User> unfilteredList){
Map<String,List<User>> result = new HashMap<>();
for(User u :unfilteredList){
String inerest = u.getInterest();
if(result.containsKey(u.getInterest())){
List<User> users = new ArrayList<>(result.get(inerest));
users.add(u);
result.put(inerest, users);
}else{
List<User> users = new ArrayList<>();
users.add(u);
result.put(inerest, users);
}
}
return result;
}

Is there a better, cleaner way to do it?

是的,使用 Java 8 Streams,您只需一行代码即可轻松重写上述内容:

public static  Map<String,List<User>> category(List<User> unfilteredList){
return unfilteredList.stream().collect(Collectors.groupingBy(u -> u.getInterest()));
}

关于java - 根据属性对不同列表中的对象进行分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47728609/

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