是的,这是一个琐碎的问题,但是我没有找到重复的问题。目前,来自此集合(ArrayList):
{
channel: "Xamper",
unSubscribers: 1
}
我必须明白这一点:(也就是说,每个单词的重复数是遇到的重复次数)
Java
C#
Java
Python
此刻我正在使用Map,但是它会删除重复项,这就是我得到的。
Java 2
C# 1
Java 2
Python 1
这是我的代码:
Java 2
C# 1
Python 1
我有个主意是将数据写入另一个列表,然后将“父”列表的每个元素与新列表的所有元素进行比较,以遍历该列表。像这样:
Map<String, Integer> map = new HashMap<>();
for (String temp : array) {
Integer count = map.get(temp);
if (count != null){
map.put(temp, count + 1);
}
else {
map.put(temp, 1);
}
}
这是我需要的,但是在遇到重复时也会创建另一行。
List<String> resultList = new ArrayList<>();
List<String> mainList = new ArrayList<>();
for (int i = 0; i < arrayList.size(); i++) {
mainList.add(i,arrayList.get(i));
}
for (int i = 0; i < mainList.size(); i++) {
int x = 1;
for (String anArray : arrayList) {
if (mainList.get(i).equals(anArray)) {
resultList.add(i,mainList.get(i) + " "+ x++);
}
}
}
resultList.forEach(System.out::println);
在使用List的实现中,我有一个问题,即将当前元素增加1,但同时又创建了另一个。
伙计们,任何会指导我解决问题的想法或线索都将令我满意!
UPD:这个问题的所有答案都是神圣的。感谢大伙们!在不冒犯他人的情况下,尝试选择正确的答案感到很尴尬。
答案 0 :(得分:3)
public static void main(String[] args) {
List<String> list = Arrays.asList("Java", "C#", "Java", "Python");
list.forEach( s -> System.out.println(s + " " + list.stream().filter( s::equals ).count()));
}
答案 1 :(得分:3)
您可以在迭代列表时使用Collections.frequency
来打印列表中每个单词出现的次数:
public static void main(String[] args) {
List<String> list = Arrays.asList("Java", "C#", "Java", "Python");
list.forEach( s -> System.out.println(s + " " + Collections.frequency(list, s)));
}
输出:
Java 2
C# 1
Java 2
Python 1
答案 2 :(得分:2)
我会这样做。首先,您将列表中每个项目的出现Map<String, Long>
收集到。之后,您只需遍历原始列表,就可以从获取的地图中打印出该项目及其计数。
这是一个例子:
List<String> list = new ArrayList<>();
list.add("Java");
list.add("CORE");
list.add("Java");
list.add("Java");
Map<String, Long> stringLongMap = list.stream() // collectors (java 8)
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
for(String item: list) { // I just printed the result, you can do whatever you want
System.out.println(item + " " + stringLongMap.get(item));
}
答案 3 :(得分:1)
List<String> arrayList = Arrays.asList("JAVA", "C", "JAVA", "PYTHON");
Map<String, Integer> map = new HashMap<>();
for (String s : arrayList) {
// computeIfAbsent checks if the key already exists in the map:
// -- if it exists, it just returns the value for that key.
// else the second param (Function) is applied to get the value.
Integer count = map.computeIfAbsent(s, key -> 0); // If key is absent, 0 will be set as value for this key. If present, value associated with this key is returned.
map.put(s, count + 1); // increment and set.
}
for (String s : arrayList){
System.out.println(s +" -> " + map.get(s));
}
答案 4 :(得分:1)
您可以执行第二次迭代,并查找与每个条目关联的计数。
以下内容创建了一个pair
,将原始密钥链接到它们各自的计数:
List<String> list = Arrays.asList("Java", "C#", "Java", "Python");
Map<String, Long> counts = list.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
//You could replace `Pair` with any other suitable type,
//such as java.util.AbstractMap.SimpleEntry<String, Long>
List<Pair<String, Long>> pairs = list.stream().map(str -> Pair.of(str, counts.get(str)))
.collect(Collectors.toList());
结果(pairs
)是[(Java,2), (C#,1), (Java,2), (Python,1)]
答案 5 :(得分:1)
您可以再次遍历“数组”并查询哈希图的频率。
Map<String, Integer> map = new HashMap<>();
for (String temp : array) {
Integer count = map.get(temp);
if (count != null){
map.put(temp, count + 1);
}
else {
map.put(temp, 1);
}
}
array.foreach(item -> System.out.println(item + " -> " + map.get(item))