![](/img/trans.png)
[英]How can I check if an ArrayList contains an Object with a specific field value?
[英]How can I check if a Set of objects contains an object having a specific fields with a specific value in Java?
我正在開發一個 Spring 引導應用程序,我對新的 Java 8 功能不太有信心。 我有以下問題。
在我的代碼中,我有這個服務方法:
@Override
public List<User> getClientsOfASubAgentUser(int subAgentId) throws NotFoundException {
Optional<User> retrievedUser = this.userRepository.findById(subAgentId);
if(retrievedUser.isEmpty()) {
throw new NotFoundException(String.format("The SUB-AGENT user having ID or email %s was not found", Integer.toString(subAgentId)));
}
// CHECK IF THE Set<UserType> returned by the getUserTypes() method contain an object having "typeName" field value equals to "SUB-AGENT"
if(retrievedUser.get().getUserTypes().????)
List<User> clientsList = this.userRepository.findByParent_Id(subAgentId);
return clientsList;
}
我的問題出在這一行(不完整):
// CHECK IF THE Set<UserType> returned by the getUserTypes() method contain an object having "typeName" field value equals to "SUB-AGENT"
if(retrievedUser.get().getUserTypes().????)
getUserTypes()返回一個Set 。 這是UserType實體 class:
@Entity
@Table(name = "user_type")
@Getter
@Setter
public class UserType implements Serializable {
private static final long serialVersionUID = 6904959949570501298L;
@Id
@Column(name = "id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
@Column(name = "type_name")
private String typeName;
@Column(name = "description")
private String description;
@ManyToMany(cascade = { CascadeType.MERGE })
@JoinTable(
name = "user_type_operation",
joinColumns = { @JoinColumn(name = "fk_user_type_id") },
inverseJoinColumns = { @JoinColumn(name = "fk_operation_id") }
)
Set<Operation> operations;
public UserType() {
super();
// TODO Auto-generated constructor stub
}
public UserType(String typeName, String description) {
super();
this.typeName = typeName;
this.description = description;
}
}
Basicallu 我需要找到一個聰明的方法(也許使用 lambda function?)來檢查getUserTypes()返回的Set中是否有一個 UserType ZA8CFDE6331BD59EB266666ZF8911C4等於字符串B
我怎樣才能正確和很好地實現這種行為?
您可以為此使用anyMatch
。 這是 stream 上的終端操作,如果傳遞的謂詞(條件)對於至少一個元素(UserType 實例)的計算結果為true ,則返回true 。 這是一個短路操作。
boolean hasTypeName = retrievedUser.get().getUserTypes()
.stream()
.anyMatch(userType -> userType.getTypeName.equals("SUB-AGENT")
if (hasTypeName) {...}
或將其內聯為
if (retrievedUser.get().getUserTypes()
.stream()
.anyMatch(userType -> userType.getTypeName.equals("SUB-AGENT")) {...}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.