質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

解決済

出力結果を降順にソートし、上位10件を表示する方法について

tenjin
tenjin

総合スコア0

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

1回答

-2評価

0クリップ

71閲覧

投稿2018/06/04 10:54

編集2022/01/12 10:58

前提・実現したいこと

以下の参考資料に記載されているコードを元に
Javaのオブジェクト指向で書かれたプログラムで
csvファイルを読み込み形式を変更した上で新たなcsvファイルを書き出すプログラムです。

以下excelですが、csv形式にしたファイルを読み書きします。
イメージ説明

参考資料

発生している問題・エラーメッセージ

現状のコード(CarクラスとCSVInandOutクラス)では、csvファイルの読み書きは問題なく行われます。これに加え、車種の辞書型データ(JavaではHashMap)に関する実装をCSVInandOutクラスに加えられます。csvで読み込んだ車種(catname)が辞書になければ、カテゴリーのインスタンスが作成され、辞書内に同じ車種(Key)があればそのKey値である個数(num)を1増やすということをCSVInandOutクラスの中で行っています。

現状のプログラムに出力結果を個数の降順に並べて上位10件だけを表示したいです。
プログラムをどの様に修正すればいいでしょうか。

該当のソースコード

Carクラス

Java

public class Car { String name; //車名 String company; //メーカー String catname; //車種 //Carクラスに追加したコンストラクタ //Carクラスに追加したコンストラクタ Car(String name, String company, String catname){ System.out.println("Carクラスのコンストラクタが呼びだされました"); this.name = name; this.company = company; this.catname = catname; } @Override public String toString() { return name + "," + company + "," + catname; } }

CSVInandOutクラス

Java

import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; public class CSVinandOut { public static void main(String[] args) { List<Car> carList = new ArrayList<Item>(); //データ格納用リスト Map<String, Integer> cat_num = new HashMap<>(); String input = "carIn.csv"; String output = "carOut.csv"; try(BufferedReader InputLine = new BufferedReader(new FileReader(input)); PrintWriter outputLine = new PrintWriter(new FileWriter(output))) { String line; line = InputLine.readLine(); //ヘッダの読み書き outputLine.println(line); //1行ずつ読み込み while ((line = InputLine.readLine()) != null) { //String変数lineに格納 String[] st = line.split(","); //lineを分割の対象にする Item item = new Item(st[0], st[1], st[2]); itemList.add(item); //リストに追加する cat_num.merge(car.catname, 1, Integer::sum); outputLine.println(item); } } catch (IOException e) { System.out.println("ファイルが開けません"); } // for(Entry<String, Integer> entry : cat_num.entrySet()){ System.out.println(entry.getKey() + ":" + entry.getValue()); } } }

補足情報(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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

mather
mather

2018/06/04 11:21

Excelはタグから削除したほうが良いと思います。
euledge
euledge

2018/06/04 16:28 編集

shoChanさんが回答された実装例は Java8以降のものなのでバージョンに制約があるならば、バージョンを示したほうが良いと思います。個人的には新しいJavaで学習したほうが良いとは思いますよ。 同じ研究室の資料にある 2016,2018年あたりのもの見比べてみてはどうでしょう。 またEclipseも、その参考資料のものより Pleiades All in One( http://mergedoc.osdn.jp/ )にあるほうが最新版です。
tenjin
tenjin

2018/06/05 02:46

コメントいただきましてありがとうございます。追記させていただきました。ただ、今問題になっているのはshoChanさんにご回答いただいた実装例をCSVInandOutクラスのどこに組み込めばいいのか理解できていないということです。長期的な勉強として他の資料も拝見させていただきます。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。