優雅にArayListで繰り返される要素を探してください。

3509 ワード

わざと優雅さを強調しましたので、二重循環などは来ないでください。先に感謝します。
群の中で分かち合うコードを見て、すべての自分で試みて、技術の蓄積だと思って、4つの学期末試験がまだありますが、しかしやはり技術は私の誘惑力に対してもっと大きくて、更に私の心の中に百回を黙読させてください。
方法1
コード:
import java.util.List;
import java.util.ArrayList;

/**
 * Created by cxh on 17/1/9.
 */
public class Main {
    public static void main(String[] args){
        List list = new ArrayList();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        list.add("ddd");
        list.add("aaa");
        list.add("aaaa");
        list.add("eee");
        list.add("bbb");
        list.add("ccc");
        StringBuilder builder = new StringBuilder();
        for(String str : list) {
            //         -1。
            if(builder.indexOf(","+str+",") > -1) {
                System.out.println("    :"+str);
            } else {
                builder.append(",").append(str).append(",");
            }
        }
    }
}
実行結果:
重複しています:aaa重複しています:bb重複しています:ccc
方法2
コードは以下の通りです
package netmethod;

import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;

/**
 * Created by cxh on 17/1/9.
 */
public class Main {
    public static void main(String[] args){
        List list=new ArrayList();
        list.add("string1");
        list.add("string2");
        list.add("string3");
        list.add("string1");
        list.add("string1");
        list.add("string1");
        list.add("string2");
        //list.add("string3");
        HashMap hashMap=new HashMap();
        for(String string:list){
            if(hashMap.get(string)!=null){  //hashMap    list      
                Integer integer=hashMap.get(string);
                hashMap.put(string,integer+1);
                System.out.println("the element:"+string+" is repeat");
            }
            else{
                hashMap.put(string,1);
            }
        }
    }
}
実行結果:
the element:string 1 is repeat the element:string 1 is repeat the element:string 1 is repeat the element:string 2 is repeat
方法3
 java 8を使っていませんので、ideaはstreamをサポートしていません。この方法は検証されていません。しばらく保存します。
コードは以下の通りです
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Main {

    public static  List getDuplicateElements(List list) {
        return list.stream() // list     Stream
                .collect(Collectors.toMap(e -> e, e -> 1, (a, b) -> a + b)) //           Map,    ,         
                .entrySet().stream() //    entry     Stream
                .filter(entry -> entry.getValue() > 1) //             1   entry
                .map(entry -> entry.getKey()) //    entry   (    )    Stream
                .collect(Collectors.toList());  //     List
    }

    public static void main(String[] args) throws Exception {
        List list = Arrays.asList("a", "b", "c", "d", "a", "a", "d", "d");
        List duplicateElements = getDuplicateElements(list);

        System.out.println("list       :" + duplicateElements);
    }

}
実行結果:
リストで重複する要素:[a,d]