83068


質問失礼いたします．

例えばなんですが

[code]

    Map<String, String> oldMap = new HashMap<>();;
    oldMap.put("suzuki", aiueo);
    
    Map<String, String> newMap = new HashMap<>();;
    newMap.put("suzuki", kkkkk);
    
[/code]

のような値がmapで定義されていたとして

また，csvがあり(縦横は行列の番号，name, old, newはヘッダーです． 1x1は1行目の一列目としています)

[code]

      1 name 2 old 3 new 4
    1 suzuki aiueo kkkkk konnitiha
    2 seigo  aiueo ttttt kontiwa
    3 suzuki kkkkk aiueo majimaji
    4 hukko  ttttt sssss ohohohoho
    
[/code]

のようになっているとき，oldMapとnewMapのkeyが等しくて，かつ，oldのvalue(csvでいう1x2)とnewのvalue(csvでいうと1x3)の値が等しいとき，konnitihaを出力したいのですが  
このようなことは実現可能でしょうか？

とにかくcsvの内容を二次元配列にしてやってみたのですが，なかなか手ごわくて困っております．

もしよろしければお力をお貸しください・・・．


CC BY-SA 4.0
2021-10-13T04:52:46.453
83063
2021-10-13T08:29:36.913
46665
question
java
Javaのmapとcsvを組み合わせて，csvのほしい個所を出力するプログラムを作っております．


CSV ファイルの内容を連想配列(HashMap)にします。

##### selectColumn.java

[code]

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.Map;
    import java.util.HashMap;
    import java.util.List;
    
    public class selectColumn {
      public static void main(String[] args) {
        // read CSV file
        HashMap<List<String>, String> tbl = readCSVFile("data.csv");
    
        // set the keys for selection
        Map<String, String> oldMap = new HashMap<>();;
        oldMap.put("suzuki", "aiueo");
        Map<String, String> newMap = new HashMap<>();;
        newMap.put("suzuki", "kkkkk");
    
        // select
        oldMap.forEach(
          (key, value) -> {
            if (newMap.containsKey(key)) {
              String matched = tbl.get(Arrays.asList(key, value, newMap.get(key)));
              System.out.println(matched == null ? "None matched" : matched);
            }
          });
      }
    
      // readCSVFile returns HashMap instance
      //   key: first, second and third column (name, old, new)
      // value: 4th column
      public static HashMap<List<String>, String> readCSVFile(String pathToCsv) {
        HashMap<List<String>, String> rows = new HashMap<>();
        try {
          File file = new File(pathToCsv);
          BufferedReader csvReader = new BufferedReader(new FileReader(file));
          csvReader.readLine(); // skip header line
          String row;
          while ((row = csvReader.readLine()) != null) {
            String[] items = row.split(",");
            rows.put(
              Collections.unmodifiableList(
                Arrays.asList(Arrays.copyOfRange(items, 0, items.length-1))),
              items[items.length-1]);
          }
          csvReader.close();
        } catch (IOException e) {
          e.printStackTrace();
          System.exit(1);
        }
    
        return rows;
      }
    }
    
[/code]

##### data.csv

[code]

    name,old,new,
    suzuki,aiueo,kkkkk,konnitiha
    seigo,aiueo,ttttt,kontiwa
    suzuki,kkkkk,aiueo,majimaji
    hukko,ttttt,sssss,ohohohoho
    
[/code]

##### 実行結果

[code]

    $ javac selectColumn.java && java selectColumn
    konnitiha
    
[/code]


CC BY-SA 4.0
2021-10-13T08:29:36.913
83068
2021-10-13T08:29:36.913
47127
83063
answer