如何在Android中的ArrayList中分别对所有类似的字符串进行分组

时间:2018-01-06 13:18:25

标签: java android sorting arraylist similarity

我有ArrayList个字符串,其大小为1,000 to 30,000个元素。

    ArrayList<String> name= new ArrayList<String>();

    ArrayList<ArrayList<String>> similar_group =new ArrayList<ArrayList<String>>();

    for(int i=0;i<munber;i++)
    {
    name.Add("name");
    }

我想将类似的字符串分组并将它们放到ArrayList

例如,10中的name ArrayList个元素值为&#34; a&#34;然后所有元素的值等于&#34; a&#34;应添加到ArrayList,然后ArrayList应添加到similar_group ArrayList

如果name ArrayList中有任何元素的值是唯一的,那么即使这个元素应添加到ArrayList,然后ArrayList应该添加到{{} 1}} ArrayList。

ArrayList的大小可能很大。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

    package application;

    import java.text.ParseException;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.stream.Collectors;

    public class T {
        public static void main(String[] args) throws ParseException {
            List<String> list = Arrays.asList("A", "B", "C", "D", "B");
            Map<String, List<String>> map = new HashMap<>();
            list.forEach(ele->{
                List<String> innerList= new ArrayList<>();
                if(map.containsKey(ele)){
                    innerList = map.get(ele);
                }
                innerList.add(ele);
                map.put(ele, innerList);
            });
            List<List<String>> valueList = map.values().stream().collect(Collectors.toList()); 
            System.out.println(valueList);
        }
    }

将每个唯一元素添加到像这样的列表中

o / p:[[A],[B,B],[C],[D]]

重构代码:

    package application;

    import java.text.ParseException;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.List;

    public class T {
        public static void main(String[] args) throws ParseException {
            List<String> list = Arrays.asList("A", "B", "C", "D", "B");
            HashMap<String, List<String>> map = new HashMap<>();
            List<List<String>> valueList = new ArrayList<>();
            list.stream().forEach(ele -> {
                List<String> innerList = new ArrayList<>();
                if (map.containsKey(ele)) {
                    innerList = map.get(ele);
                } else {
                    valueList.add(innerList);
                }
                innerList.add(ele);
                map.put(ele, innerList);
            });
            System.out.println(valueList);
        }

    }

答案 1 :(得分:0)

如果您需要删除ArrayList中的重复内容,则应考虑是否确实需要使用List(允许重复)而不是Set(其中不是Set。 t允许重复)。这里唯一需要注意的是LinkedHashSet是无序的,但可以使用ArrayList进行更改。 如果您需要将其保留为ArrayList,请尝试将HashSet中的所有内容添加到ArrayList并返回List<String> a = new ArrayList<>(); Set<String> s = new HashSet<>(); s.addAll(a); a.clear(); a.addAll(s); 以删除重复项(这样做不会保留元素的顺序):

starArray[streakCounter-1].image = UIImage(named: "22.png")