我有一个INSTITUserConnections列表,我将拥有这些用户。 因此,我遍历了INSTITUserConnections列表。 可能是用户在多个机构中。 因此,我有2个不同的用户对象 - 但它是同一个用户。
我现在的问题是如何获得一个独特的用户列表?
final List<User> users = new ArrayList<>();
for (final InstitutionUserConnection institutionUserConnection : institutionUserConnections) {
final User user = institutionUserConnection.getUser();
users.add(user);
}
[编辑] 实际上很难解释。我也使用了Set但没有成功。 这是我使用的完整代码:
final List<InstitutionUserConnection> institutionUserConnectionsOfUser = institutionUserConnectionService
.getActiveInstitutionUserConnectionsByUser(foundedUser);
final List<InstitutionUserConnection> institutionUserConnections = new ArrayList<>();
for (final InstitutionUserConnection institutionUserConnection : institutionUserConnectionsOfUser) {
final Institution institution = institutionUserConnection.getInstitution();
institutionUserConnections
.addAll(institutionUserConnectionService.getActiveInstitutionUserConnectionsByInstitution(institution));
}
final List<User> users = new ArrayList<>();
for (final InstitutionUserConnection institutionUserConnection : institutionUserConnections) {
final User user = institutionUserConnection.getUser();
users.add(user);
}
也许有人有另外一个提示我如何解决这个问题。
答案 0 :(得分:1)
在注释用户HashSet中建议,它将仅保留对象的唯一引用。
我无法清楚地理解你的问题。我设计了一种解决问题的方法,我希望它有所帮助
- 的列表
class InstituteUserConnection
拥有名称和User
s。listOfInsituteUserConnection
将保留InstituteUserConnection
。- 迭代
listOfInsituteUserConnection
并获取用户并将其放入Set<User>
。你可以查看用户的计数 交叉验证并打印出来。- FYI HashSet的工作原理是哈希检查link以获取信息。
醇>
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
class User {
String name;
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int hashCode() {
return this.name.hashCode();
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof User)) {
return false;
}
User objUser = (User) obj;
System.out.println("in equals");
return this.name.equals(objUser.getName());
}
@Override
public String toString() {
return this.name;
}
}
public class InstitutionUserConnections {
String institutionName;
List<User> users;
public InstitutionUserConnections(String institutionName, List<User> users) {
this.users = users;
this.institutionName = institutionName;
}
public void addUser(User user) {
this.users.add(user);
}
public List<User> getUsers() {
return this.users;
}
public static void main(String[] args) {
User user1 = new User("user1");
User user2 = new User("user2");
List<InstitutionUserConnections> listOfInstitutionUserConnections = new ArrayList<InstitutionUserConnections>();
List<User> institute1User = Arrays.asList(new User[] { user1, user2 });
InstitutionUserConnections institute1 = new InstitutionUserConnections(
"institute1", institute1User);
List<User> institute2User = Arrays.asList(new User[] { user1 });
InstitutionUserConnections institute2 = new InstitutionUserConnections(
"institute1", institute2User);
listOfInstitutionUserConnections.add(institute1);
listOfInstitutionUserConnections.add(institute2);
Set<User> listOfUniqueUsers = new HashSet<User>();
for (InstitutionUserConnections institute : listOfInstitutionUserConnections) {
listOfUniqueUsers.addAll(institute.getUsers());
}
System.out.println("No of User in Set<User> : "
+ listOfUniqueUsers.size());
for (User user : listOfUniqueUsers) {
System.out.println(user);
}
}
}
答案 1 :(得分:0)
试试这个
final HashSet<User> users = new HashSet<>();
for (final InstitutionUserConnection institutionUserConnection : institutionUserConnections) {
final User user = institutionUserConnection.getUser();
users.add(user);
}
// iterate users to check unique
答案 2 :(得分:0)
如果您急于使用List / ArrayList或任何集合,我建议覆盖您的Equals方法并使用您想要使用的数据结构。 Apache Commons Collection提供了一个很棒的单行代码来提供唯一的列表。
添加Maven依赖项或下载jar:
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
然后只需使用以下代码行:
SetUniqueList uniqueList = SetUniqueList.decorate(<<Your list>>);
并覆盖Equals和HashCode:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
YourClass tester = (YourClass) o;
if (user!= null ? !user.equals(tester.user) : tester.user!= null) return false;
return true;
}
@Override
public int hashCode() {
int result = user != null ? user.hashCode() : 0;
result = 31 * result + (anotherField!= null ? anotherField.hashCode() : 0);
return result;
}