[英]Good way to store data based on user listed as a string?
我有一个字符串数组列表。 字符串包含三个信息。 信息本身并不重要,但字符串列表的布局如下:
"24,requested,john@email.com"
"22,sent,jane@email.com"
"67,pending,john@email.com"
我想遍历 arraylist 并根据用户电子邮件存储字符串的前两部分。 例如字符串:
"24,requested,john@email.com"
我想根据用户电子邮件“john@email.com”存储“24”和“请求”。 由于字符串的长度不同,我知道我可以用“,”分割字符串。 我只是不知道使用什么数据结构来以我解释的方式存储信息。
这只是许多其他可用的方式。
package com.company;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
class UserInfo {
int numberId;
String status;
String email;
public UserInfo(int numberId, String status, String email) {
this.numberId = numberId;
this.status = status;
this.email = email;
}
// getters and setters
@Override
public String toString() {
return "UserInfo{" +
"numberId=" + numberId +
", status='" + status + '\'' +
", email='" + email + '\'' +
'}';
}
//...
}
public class Test {
public static void main(String[] args) {
String[] entries = {"24,requested,john@email.com", "22,sent,jane@email.com", "67,pending,john@email.com" };
List<UserInfo> userInfos = new ArrayList<>();
for (String line : entries) {
String[] splittedLine = line.split(",");
String email = splittedLine[2];
int numberId = Integer.parseInt(splittedLine[0]);
String status = splittedLine[1];
UserInfo u = new UserInfo(numberId, status, email);
userInfos.add(u);
}
// you can store on a list
System.out.println(userInfos);
// [UserInfo{numberId=24, status='requested', email='john@email.com'}, UserInfo{numberId=22, status='sent', email='jane@email.com'}, UserInfo{numberId=67, status='pending', email='john@email.com'}]
// or you can group the userInfos by a property
Map<String, List<UserInfo>> mapUsersByEmail = userInfos.stream().collect(Collectors.groupingBy(UserInfo::getEmail));
System.out.println(mapUsersByEmail);
// {
// jane@email.com=[
// UserInfo{numberId=22, status='sent', email='jane@email.com'}
// ],
// john@email.com=[
// UserInfo{numberId=24, status='requested', email='john@email.com'}, UserInfo{numberId=67, status='pending', email='john@email.com'}
// ]
// }
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.