如何将三个不同的集合迭代在一起

时间:2018-05-25 12:29:23

标签: java data-structures

我有三个收藏, 前两个是参考数据,第三个是实际数据集。 我正在尝试检查参考日期集合中是否存在帐户数据。 如果它不存在, 我需要为当天的帐户添加虚拟数据。 这里最好的迭代逻辑是什么才能获得最佳性能。 我无法将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 :(得分:2)

这是你要找的吗?

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))

答案 1 :(得分:1)

使用以下逻辑

 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);
    }
}