昨日は、表の最終行に結果を書いた表CSVだったが、右端に置いた表の場合での
プログラムはどうなるか、
とても簡単になる。
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();