繁体   English   中英

基于列为字符串的用户存储数据的好方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM