[英]How to print elements from generic array list, using iterator in Java
[英]print occurrences of elements in an array list using java
嗨,我创建了一个逻辑来计算数组列表中元素的出现,但是它并没有按照我想要的确切顺序打印。 下面我提供了我的代码和要求。
我需要以下格式,
list: [1, 1, 5, 3, 7 ,7 ,7 , 3, 11, 2, 2, 3, 1]
number: 1, count: 2
number: 5, count: 1
number: 3, count: 1
number: 7, count: 3
number: 3, count: 1
number: 11, count: 1
number: 2, count: 2
number: 3, count: 1
number: 1, count: 1
但是,我的格式如下,
list: [1, 1, 5, 3, 7 ,7 ,7 , 3, 11, 2, 2, 3, 1]
number: 1, count: 3
number: 5, count: 1
number: 3, count: 3
number: 7, count: 3
number: 11, count: 1
number: 2, count: 2
这是我的代码
package com.abc;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MyArrayListSort
{
public static void main(String []args){
new MyArrayListSort().start();
}
public void start() {
List<Integer> list = getList(1, 1, 5, 3, 7 ,7 ,7 , 3, 11, 2, 2, 3, 1);
Map<Integer, Integer> map = new LinkedHashMap<Integer, Integer>();
for (Integer i : list) {
Integer retrievedValue = map.get(i);
if (null == retrievedValue) {
map.put(i, 1);
}
else {
map.put(i, retrievedValue + 1);
}
}
System.out.println("list: " + list);
printCount(map);
}
private List<Integer> getList(int... numbers)
{
List<Integer> list = new ArrayList<Integer>();
for (int i : numbers)
{
list.add(i);
}
return list;
}
private void printCount(Map<Integer, Integer> map)
{
for (Integer key : map.keySet())
{
System.out.println("number: " + key + ", count: " + map.get(key));
}
}
}
逻辑:跟踪currentValue及其以连续顺序重复的次数。 数字更改后,将值和到目前为止的数值插入列表。
最后,将剩余的值(列表中的最终值)推入该值并计数。
编辑:您可以完全删除newList并像@Andreas在注释中指出的那样编写打印语句。
码:
List<Integer> list = Arrays.asList(1, 1, 5, 3, 7, 7, 7, 3, 11, 2, 2, 3, 1);
List<Pair<Integer, Integer>> newList = new ArrayList<>();
Integer previousValue = null;
Integer previousCount = 0;
for(Integer value : list) {
if(previousValue == null) {
previousValue = value;
previousCount++;
} else if(previousValue.intValue() == value.intValue()) {
previousCount++;
} else {
newList.add(new Pair<>(previousValue, previousCount));
previousValue = value;
previousCount = 1;
}
}
if(previousValue != null) {
newList.add(new Pair<>(previousValue, previousCount));
}
for(Pair<Integer,Integer> pair : newList) {
System.out.println(pair.getKey() + ":" + pair.getValue());
}
输出:
1:2
5:1
3:1
7:3
3:1
11:1
2:2
3:1
1:1
这可能是解决此问题的最短代码版本:
List<Integer> list = Arrays.asList(1, 1, 5, 3, 7, 7, 7, 3, 11, 2, 2, 3, 1);
System.out.println("list: " + list);
for (int i = 0, prev = -1; i < list.size(); i++) {
if (i == list.size() - 1 || ! list.get(i).equals(list.get(i + 1))) {
System.out.printf("number: %d, count: %d%n", list.get(i), i - prev);
prev = i;
}
}
输出量
list: [1, 1, 5, 3, 7, 7, 7, 3, 11, 2, 2, 3, 1]
number: 1, count: 2
number: 5, count: 1
number: 3, count: 1
number: 7, count: 3
number: 3, count: 1
number: 11, count: 1
number: 2, count: 2
number: 3, count: 1
number: 1, count: 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.