![](/img/trans.png)
[英]How to create a CSV file using the values from another CSV file in Java without using third party library
[英]How to get index of first matched element from the list of class object in java (Without using any third party Library)
我有一个 class object 列表(列表)。 我想从具有特定用户状态的列表中获取第一个用户的索引。
public enum UserStatus {
CREATED("CREATED"),
AVAILABLE("AVAILABLE"),
CHECKIN("CHECKIN"),
CHECKOUT("CHECKOUT"),
ON_TRIP("ONTRIP"),
UNAVAILABLE("UNAVAILABLE");
}
Class Users{
private Long id;
private Long userId;
private UserStatus userStatus;
private Date createdAt;
}
Class Main{
public static void main(String args[]){
List<Users> userList = getListofUser(); // this method will give me list of users
// here I want to find the first user whose status is AVAILABLE
}
}
我正在寻找类似于 List indexOf() 方法
您可以使用 Java 流和选项来执行此操作
Optional<User>firstMatchingUserOptional = userList.stream.filter(user -> user.getUserStatus().equals(UserStatus.AVAILABLE)).findFirst();
if(firstMatchingUserOptional.isPresent())
int firstMatchingUserIndex = userList.indexOf(firstMatchingUserOptional.get());
只需遍历列表,当您发现AVAILABLE
从循环返回时。
Users getFirstAvailableUser(List<Users> userList ) {
Iterator<Users> it = userList.iterator();
while ( it.hasNext() ) {
Users curr = it.next();
if ( curr.getUserStatus() == UserStatus.AVAILABLE ) {
return curr;
}
}
return null;
}
您可以使用
int index = IntStream.range(0, userList.size())
.filter(ix -> userList.get(ix).getUserStatus() == UserStatus.AVAILABLE)
.findFirst().orElse(-1);
如果您不想使用 Stream API 或怀疑该列表没有有效的随机访问,您可以使用
int index = -1;
for(ListIterator<Users> i = userList.listIterator(); i.hasNext(); ) {
if(i.next().getUserStatus() == UserStatus.AVAILABLE) {
index = i.previousIndex();
break;
}
}
作为旁注,class 名称应反映 class 的单个实例所代表的内容,即当一个 object 代表单个用户时, User
而不是Users
。 此外,无需将enum
常量的名称传递给它们自己。 他们确实已经知道他们的名字。
当您将类型声明为
public enum UserStatus {
CREATED,
AVAILABLE,
CHECKIN,
CHECKOUT,
ON_TRIP,
UNAVAILABLE
}
调用UserStatus.AVAILABLE.name()
将为您提供字符串"AVAILABLE"
并调用UserStatus.valueOf("AVAILABLE")
将返回常量UserStatus.AVAILABLE
。 你不需要自己实现这样的逻辑。
你可以使用 for 循环;
就像是
`for(User tempUser : userList){
if(tempUser.UserStatus.equals(UserStatusTemp)){
//do job
break;
}
}`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.