bugfix> java > 投稿

私は3つのコレクションを持っています 最初の2つは参照データで、3つ目は実際のデータセットです。 参照日付コレクションのアカウントのデータが存在することを確認しようとしています。 ない場合は、 その日のアカウントのダミーデータを追加する必要があります。 最適なパフォーマンスを得るためにここで従うべき最良の反復ロジックは何でしょうか。 リストとして指定されているハッシュマップにリストデータセットを変更できません。

コードは次のとおりです。

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 件
  • これはあなたが探しているものですか?

    for (final String[] strs : dataList) {
       final String date = strs[0];
       if (!dates.contains(date)) {
       }
    }
    
    

    ストリームAPIの使用(Java 8)

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

    以上の表現力

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

  • 以下のロジックを使用

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

あなたの答え