基于列为字符串的用户存储数据的好方法?
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"
我想遍历数组列表并根据用户电子邮件存储字符串的前两部分。例如字符串:
"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'}
// ]
// }
}
}
我有一个字符串数组列表。这些字符串包含三个信息。信息本身并不重要,但字符串列表的布局如下:
"24,requested,john@email.com"
"22,sent,jane@email.com"
"67,pending,john@email.com"
我想遍历数组列表并根据用户电子邮件存储字符串的前两部分。例如字符串:
"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'}
// ]
// }
}
}