Как перебрать три разных коллекции вместе - PullRequest
0 голосов
/ 25 мая 2018

У меня есть три коллекции, первые две - справочные данные, а третья - фактический набор данных.Я пытаюсь проверить, что данные для учетной записи существуют для сбора контрольной даты.Если его там нет, мне нужно добавить фиктивные данные для этой учетной записи за день.Какую логику итерации лучше придерживаться здесь для оптимальной производительности.Я не могу изменить набор данных List на hashmap, он задан как List.

Вот код:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class FindAccountExistForDay {

    public String userStart;
    public String accountId;
    public String genre;

    public static void main(String args[]){

        Set<String> accounts= new HashSet<String>();
        accounts.add("1");
        accounts.add("2");
        accounts.add("3");
        accounts.add("4");
        accounts.add("5");
        accounts.add("6");

        Set<String> dates= new HashSet<String>();
        dates.add("05032018");
        dates.add("05042018");
        dates.add("05052018");
        dates.add("05062018");
        dates.add("05072018");
        dates.add("05082018");
        dates.add("05092018");



        List<String[]> dataList= new ArrayList<String[]>();
        String[] strings = {"05032018", "1", "John"};
        String[] strings2 = {"05042018", "1", "John"};
        String[] strings3 = {"05062018", "3", "David"};
        String[] strings4 = {"05072018", "4", "Gilbert"};
        String[] strings5 = {"05082018", "5", "Mark"};
        String[] strings6 = {"05092018", "6", "Neil"};
        String[] strings7 = {"05032018", "2", "Dan"};

        dataList.add( strings);
        dataList.add( strings2);
        dataList.add( strings3);
        dataList.add( strings4);
        dataList.add( strings5);
        dataList.add( strings6);
        dataList.add( strings7);

    for (String date: dates){
        Set<Object> groupSet= new HashSet<Object>();
            for (String acct: accounts){
                while(dataList.iterator().hasNext()){
                    //do the logic here?
              } 
            }
            System.out.println("date:"+ date +":"+ groupSet);
        }
    }   
}

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Использовать ниже логики

 for (String date: dates){
    Set<Object> groupSet= new HashSet<Object>();
        for (String acct: accounts){
            Iterator<String[]> iterator=dataList.iterator();
            boolean b=false;
            while(iterator.hasNext()){
                //do the logic here?
                List checkList=Arrays.asList(iterator.next());
                b=checkList.contains(date)&&checkList.contains(acct);
                if(b)break;
          }
          if(!b){
              //add dummy data here
              System.out.println(date + "  "+acct);
          }

        }
        System.out.println("date:"+ date +":"+ groupSet);
    }
}   
0 голосов
/ 25 мая 2018

Это то, что вы ищете?

for (final String[] strs : dataList) {
   final String date = strs[0];

   if (!dates.contains(date)) {

   }
}

Использование Stream API (Java 8)

dataList.stream().filter(strs -> !dates.contains(strs[0]))

или более выразительный

dataList.stream().map(strs -> strings[0]).filter(date -> !dates.contains(date))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...