右端に結果を書いた表のCSVから結果を求める

昨日は、表の最終行に結果を書いた表CSVだったが、右端に置いた表の場合での
プログラムはどうなるか、
f:id:posturan:20191231112948j:plain
とても簡単になる。

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import org.yipuran.csv.CsvStreamProcessor;
import org.yipuran.csv4j.ParseException;
import org.yipuran.csv4j.ProcessingException;
/**
 * MatrixRight
 */
public class MatrixRight<T>{
   private Map<String, T> map = new HashMap<>();
   public MatrixRight(File file, Function<String, T> resultFunc){
      try(InputStream in = new FileInputStream(file)){
         Csvprocess csvproces = new Csvprocess();
         csvproces.read(new InputStreamReader(in, "MS932"), h->{}, (n, p)->{
            map.put(IntStream.range(1, p.size()-1).boxed()
                     .map(i->p.get(i)).collect(Collectors.joining("_"))
                  , resultFunc.apply(p.get(p.size()-1)));
         });
      }catch(IOException ex){
         ex.printStackTrace();
      }catch(ParseException ex){
         ex.printStackTrace();
      }catch(ProcessingException ex){
         ex.printStackTrace();
      }
   }
   public Optional<T> query(String...ary){
      return Optional.ofNullable(map.get(Arrays.stream(ary).collect(Collectors.joining("_"))));
   }
   public Optional<T> query(List<String> list){
      return Optional.ofNullable(map.get(list.stream().collect(Collectors.joining("_"))));
   }
}

Excel で書いた表をCSVにしてるので、"MS932" 文字コードエイリアスで読込む、
使用例

MatrixRight<Boolean> mr =   new MatrixRight<>(file2, e->Boolean.valueOf(e));
Boolean b = mr.query("Y", "N", "N").get();