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