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

How to group all similar Strings separately in an ArrayList in Android

我有一个 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

例如 name ArrayList 中有 10 个值为 "a" 的元素,则应将所有值为 "a" 的元素添加到 ArrayList 然后 ArrayList 应该添加到 similar_group ArrayList.

如果 name ArrayList 中有任何元素的值是唯一的,那么即使那个元素也应该添加到 ArrayList 然后那个 ArrayList 应该添加到similar_group数组列表。

ArrayList 的大小可能很大。那么有什么办法可以做到这一点吗?

如果您需要从 ArrayList 中删除重复项,您应该考虑是否真的需要使用 List(允许重复项)而不是 Set(不允许重复项)不允许重复)。这里唯一需要注意的是 Set 是无序的,但这可以通过使用 LinkedHashSet 来改变。 如果您需要它保持 ArrayList,请尝试将 ArrayList 中的所有内容添加到 HashSet 并返回到 ArrayList 以删除重复项(这确实 保留元素的顺序):

List<String> a = new ArrayList<>();
Set<String> s = new HashSet<>();
s.addAll(a);
a.clear();
a.addAll(s);
    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);
        }

    }