ArrayList内に
aaa,
bbb,
ccc,
ddd,
aaa,
bbb,
ccc.
aaa,
bbb,
aaa
と、値が入っているとします
aaaが4つ
bbbが3つ
cccが2つ
dddが1つ
と、文字列ごとに重複した数を取りたいです
array内の要素とか要素数とかは事前にはわからないです
宜しくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
java
1import java.util.Arrays; 2import java.util.List; 3import java.util.stream.Collectors; 4 5 6public class Main { 7 public static void main(String... args) 8 { 9 List<String> list = Arrays.asList("a", "a", "b"); 10 11 System.out.println(list.stream().collect( 12 Collectors.groupingBy(x -> x, Collectors.counting()) 13 )); 14 } 15}
ストリーム記法がまったく美しくならないのは現在のJavaの欠陥と言わざるを得ませんね。LINQならもっと美しく直感的になるのですが。
投稿2017/03/09 05:44
総合スコア5570
0
原理的には、同じものをカウントしていけばいい。
java
1Map<String, Integer> map = new HashMap<>(); 2for (String s : list) { 3 Integer i = map.get(s); 4 map.put(s, i == null ? 1 : i + 1); 5}
以下はJava8使用
java
1Map<String, Integer> map = new HashMap<>(); 2for (String s : list) { 3 map.merge(s, 1, Integer::sum); 4}
さらにStreamを使うとyuba様の回答のようになりますが、
それをimport staticを使って少しだけきれいに書いてみた
java
1import java.util.Map; 2import java.util.Arrays; 3import static java.util.stream.Collectors.*; 4import static java.util.function.Function.*; 5 6public class Main { 7 public static void main(String[] args) 8 { 9 Map<String, Long> map = Arrays.asList("a", "a", "b") 10 .stream() 11 .collect(groupingBy(identity(), counting())); 12 } 13}
投稿2017/03/09 15:32
編集2017/03/11 00:39総合スコア20657
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
以下のように書いても重複した値の個数を表示できます
java
1import java.util.*; 2 3class DO5{ 4 5public static void main(String[] args){ 6 7ArrayList<String> a=new ArrayList<>(); 8a.add("aaa"); 9a.add("bbb"); 10a.add("ccc"); 11a.add("ddd"); 12a.add("aaa"); 13a.add("bbb"); 14a.add("ccc"); 15a.add("aaa"); 16a.add("bbb"); 17a.add("aaa"); 18 19TreeSet<String> b=new TreeSet<>(a); 20 21for(String s:b){ 22int coun=0; 23for(String c:a){ 24if(s.equals(c))coun++; 25} 26System.out.println(s+"が"+coun+"つ"); 27} 28 29 30} 31 32} 33
投稿2017/03/09 06:11
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/10 14:52