如何在 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);
}
}
我有一个 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);
}
}