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

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

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

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

Q&A

解決済

2回答

1151閲覧

ArrayListを内容別に分割する方法

my_loc22

総合スコア1

Java

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

0グッド

0クリップ

投稿2022/01/25 09:46

編集2022/01/25 12:31

1つの ArrayList<Map<String,String> を中身ごとに分割したいです。

java

1map.put("user","a"); 2map.put("time","11:30"); 3Arraylist.add(map); 4map.put("user","a"); 5map.put("time","11:40"); 6Arraylist.add(map);

といった形式で複数人分のデータがあります。
この1つのArraylistをユーザー名ごとのArrayListに分割したいです。
何かいいやり方を教えていただきたいです。よろしくお願いいたします。

<追記>
言葉足らずで申し訳ございません。

java

1for (int i = 0; i < ArrayList.size(); i++) { 2 temp = locList.get(i).get("user"); 3 if(temp.equals(user1)){ 4 temp = ArrayList.get(i).get("user"); 5 user1Data.put("user", temp); 6 temp = ArrayList.get(i).get("time"); 7 user1Data.put("time", temp); 8 user1List.add(user1Data); 9 user1Data = new HashMap<>(); 10 } 11 else if (temp.equals(user2)) { 12 temp = ArrayList.get(i).get("user"); 13 user2Data.put("user", temp); 14 temp = ArrayList.get(i).get("time"); 15 user2Data.put("time", temp); 16 user2List.add(user2Data); 17 user2Data = new HashMap<>(); 18 } 19}

上記が自分で書いたコードです。
「List 分割」等で検索したところ、addAllを用いるやり方があったものの、
ArrayList<String>形式であったため、ArrayList<Map<String, String>>形式の場合も
対応できるのかもわかっていない状態です。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2022/01/25 10:29

"いい"やり方かどうかの判断基準(処理時間やコード量や…)は何でしょう。 比較対象として、ご自分で書いたコードもご提示ください。
m.ts10806

2022/01/25 10:50

イメージする形はなんでしょう。 json形式とかで良いので目指す形を提示してください
jimbe

2022/01/25 17:23 編集

"いい"やり方、ではなく、そもそも分割が出来ないということですね。 というか、最終的にどういう形が『分割された状態』なのかもハッキリしていないかのようなコードが追加されたのですが、 m.ts10806 さんが仰られているように、目指す形、例えば user が a,b,c と3種類ある全10データが ArrayList に入っているとして、Befire/After のアフターの状態をコードで書いて頂けますでしょうか。 それとも、分割出来てからそれに合わせて次を考えるというおつもりでしょうか。
guest

回答2

0

ベストアンサー

ArrayList<Map<String, String>>形式の場合も対応できるのかもわかっていない状態です。

わかるようになりましょう。

「List 分割」等で

Collectors#groupingBy()をつかう。

java

1import java.util.*; 2import java.util.stream.Collectors; 3public class Hogege { 4 public void hoge() { 5 final ArrayList<Map<String, String>> list = new ArrayList<>(); 6 final Map<String, List<Map<String, String>>> 7 result = 8 list.stream() 9 .collect(Collectors.groupingBy(it -> it.get("user"))); 10 } 11}

投稿2022/01/25 23:53

shiketa

総合スコア3971

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

そのリストを複数作っておいて、内容別にリストに追加していけばよろしい

投稿2022/01/25 13:28

y_waiwai

総合スコア87749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問