Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- class UserMailMerge {
- public static void main(String[] args) {
- List<String> inArr = List.of(
- "user1->[email protected],[email protected]",
- "user2->[email protected],[email protected]",
- List<String> outArr = new ArrayList();
- Map<String, Set<String>> userMailsAsIsMap = new LinkedHashMap<>(); // <user, Set<mail>>
- Map<String, String> mailOfUserMap = new LinkedHashMap<>(); // <mail, user>
- for (String rec : inArr){
- String[] userAndMails = rec.split("->");
- String user = userAndMails[0];
- String[] mails = userAndMails[1].split(",");
- userMailsAsIsMap.put(user, Set.of(mails));
- Set<String> previousUsers = new HashSet();
- Set<String> mailsForAddOrChange = new HashSet();
- for(String mail : mails) {
- mailsForAddOrChange.add(mail);
- if(mailOfUserMap.containsKey(mail)){
- previousUsers.add(mailOfUserMap.get(mail));
- }
- }
- for(String previousUser : previousUsers){
- for(String mailForChange : userMailsAsIsMap.get(previousUser)){
- mailsForAddOrChange.add(mailForChange);
- }
- }
- if (!previousUsers.isEmpty()){
- user = previousUsers.iterator().next();
- }
- for (String mailForAddOrChange : mailsForAddOrChange){
- mailOfUserMap.put(mailForAddOrChange, user);
- }
- }
- // fill return resulr
- Map<String, Set<String>> userMailMap = new LinkedHashMap<>(); // <user, Set<mail>>
- for(Map.Entry<String, String> mailUserEntry : mailOfUserMap.entrySet()){
- if (userMailMap.get(mailUserEntry.getValue()) == null){
- userMailMap.put(mailUserEntry.getValue(), new LinkedHashSet<>());
- }
- userMailMap.get(mailUserEntry.getValue()).add(mailUserEntry.getKey());
- }
- for(Map.Entry<String, Set<String>> mailUserEntry : userMailMap.entrySet()){
- StringBuilder sb = new StringBuilder(mailUserEntry.getKey());
- sb.append("->");
- sb.append(String.join(",", mailUserEntry.getValue()));
- outArr.add(sb.toString());
- }
- System.out.println("--- inArr: " + inArr);
- inArr.forEach(System.out::println);
- System.out.println("--- outArr: " + outArr);
- outArr.forEach(System.out::println);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement