如何在java中为不同的值循环ArrayList

时间:2017-01-28 01:46:46

标签: java for-loop arraylist duplicates

我只是在练习java。

我有这个包含重复值的ArrayList。

我想遍历此列表,以便它可以按组打印这些重复值。

这是我的方法所包含的内容。

{
  "compilerOptions": {
    "allowJs": true,
    "outDir": "./dist",
    "target": "ES6",
    "module": "commonjs",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": true,
    "noImplicitAny": false,
    "strictNullChecks": true,
    "noUnusedLocals": true,
    "types": [
      "node"
    ],
    "typeRoots": [
      "./node_modules/@types"
    ],
    "lib": ["es2015", "dom"]
  },
  "include": [
    "./src/"
  ]
}

并打印如下。

printed loop

我想做的就像打印一样

what iam trying

请帮我解决这个问题。 感谢。

3 个答案:

答案 0 :(得分:2)

很简单,当前一个值与当前值不同时添加换行符。但是,你不应该使用raw types。你应该对List进行排序(并且更喜欢具体类型的接口)。您可以使用Arrays.asList初始化List。像,

List<Integer> nomero = new ArrayList<>(Arrays.asList(1, 1, 2, 2, 3, 3));
Collections.sort(nomero);
for (int i = 0; i < nomero.size(); i++) {
    if (i > 0 && nomero.get(i - 1) != nomero.get(i)) {
        System.out.println();
    }
    System.out.println(nomero.get(i));
}

答案 1 :(得分:1)

所以,在一个非常基础的层面上,你需要知道&#34;最后一个值&#34;是,当它等于&#34;当前值&#34;时,你添加一个新行并更新&#34;最后一个值&#34;等于&#34;当前值&#34;

ArrayList<Integer> nomero = new ArrayList<>();

nomero.add(1);
nomero.add(1);
nomero.add(2);
nomero.add(2);
nomero.add(3);
nomero.add(3);

int lastValue = nomero.get(0);

for (int i = 0; i < nomero.size(); i++) {
    int nextValue = nomero.get(i);
    if (nextValue != lastValue) {
        System.out.println("");
        lastValue = nextValue;
    }
    System.out.println(nextValue);

}

这确实假设列表已经排序

答案 2 :(得分:0)

Java 8简化了......

List<Integer> nomero = Arrays.asList(1, 1, 2, 2, 3, 3);
Map<Integer, Long> map = nomero.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
    for (Integer i : map.keySet()) {
        for (int j = 0; j < map.get(i); j++) {
            System.out.println(i);
        }
        System.out.println();
    }