前提・実現したいこと
以下の参考資料に記載されているコードを元に
Javaのオブジェクト指向で書かれたプログラムで
csvファイルを読み込み形式を変更した上で新たなcsvファイルを書き出すプログラムです。
以下excelですが、csv形式にしたファイルを読み書きします。
発生している問題・エラーメッセージ
現状のコード(CarクラスとCSVInandOutクラス)では、csvファイルの読み書きは問題なく行われます。これに加え、車種の辞書型データ(JavaではHashMap)に関する実装をCSVInandOutクラスに加えられます。csvで読み込んだ車種(catname)が辞書になければ、カテゴリーのインスタンスが作成され、辞書内に同じ車種(Key)があればそのKey値である個数(num)を1増やすということをCSVInandOutクラスの中で行っています。
現状のプログラムに出力結果を個数の降順に並べて上位10件だけを表示したいです。
ご回答いただいたコードを追記して、プログラムを動かそうとしたところ、
以下のエラーメッセージが下から3行目で出る様になりました。
どのように修正すればいいでしょうか。
エラーメッセージ
メソッド reverseOrder(Map.Entry.comparingByValue()) は型 PolicyUtils.Collections で未定義です
該当のソースコード
Carクラス
Java
1 2public class Car { 3 4 String name; //車名 5 String company; //メーカー 6 String catname; //車種 7 8 9 //Carクラスに追加したコンストラクタ 10 //Carクラスに追加したコンストラクタ 11 Car(String name, String company, String catname){ 12 System.out.println("Carクラスのコンストラクタが呼びだされました"); 13 this.name = name; 14 this.company = company; 15 this.catname = catname; 16 } 17 18 @Override 19 public String toString() { 20 return name + "," + company + "," + catname; 21 } 22 }
CSVInandOutクラス
Java
1import java.io.BufferedReader; 2import java.io.FileReader; 3import java.io.FileWriter; 4import java.io.IOException; 5import java.io.PrintWriter; 6import java.util.ArrayList; 7import java.util.HashMap; 8import java.util.List; 9import java.util.Map; 10import java.util.Map.Entry; 11 12import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils.Collections; 13 14public class CSVinandOut { 15 public static void main(String[] args) { 16 List<Car> carList = new ArrayList<Item>(); //データ格納用リスト 17 Map<String, Integer> cat_num = new HashMap<>(); 18 String input = "carIn.csv"; 19 String output = "carOut.csv"; 20 21 try(BufferedReader InputLine = new BufferedReader(new FileReader(input)); 22 PrintWriter outputLine = new PrintWriter(new FileWriter(output))) { 23 24 String line; 25 26 line = InputLine.readLine(); //ヘッダの読み書き 27 outputLine.println(line); 28 29 //1行ずつ読み込み 30 while ((line = InputLine.readLine()) != null) { //String変数lineに格納 31 String[] st = line.split(","); //lineを分割の対象にする 32 Item item = new Item(st[0], st[1], st[2]); 33 itemList.add(item); //リストに追加する 34 cat_num.merge(car.catname, 1, Integer::sum); 35 outputLine.println(item); 36 } 37 38 } 39 40 catch (IOException e) { 41 System.out.println("ファイルが開けません"); 42 } 43 44 45 for(Entry<String, Integer> entry : cat_num.entrySet()){ 46 System.out.println(entry.getKey() + ":" + entry.getValue()); 47 } 48 49 //ご回答いただいたコード 50 cat_num.entrySet() 51 .stream() 52 .sorted(Collections.reverseOrder(Map.Entry.comparingByValue())) //valueの降順にする 53 .limit(5) //上位5位まで(適宜直してください) 54 .forEach(e -> System.out.println(e.getKey() + ":" + e.getValue())); //結果出力 55 } 56} 57 58
補足情報(FW/ツールのバージョンなど)
Eclipse Java EE IDE for Web Developers.
Version: Oxygen.3a Release (4.7.3a)
Microsoft Excel for Mac バージョン16.13
Javaバージョン(java.version):1.8.0_152
オペレーティングシステム名(os.name):Mac OS X


回答1件
あなたの回答
tips
プレビュー