在java中分别打印重复值和非重复值

在java中分别打印重复值和非重复值,java,printing,java-8,duplicates,printf,Java,Printing,Java 8,Duplicates,Printf,我想分别打印重复值和非重复值 String[] values= { "Java","C", "JavaScript", "JavaScript", "Java" ,"Java", "Java" , "JavaScript", "Java", "Ruby"}; 我的输出应该在下面 String[] duplicate = {"Java", "Java", "Java", "Java", "Java", "JavaScript", "JavaScript", "Java"} String[] u

我想分别打印重复值和非重复值

String[] values= { "Java","C", "JavaScript", "JavaScript", "Java" ,"Java", "Java" , "JavaScript", "Java", "Ruby"};
我的输出应该在下面

String[] duplicate = {"Java", "Java", "Java", "Java", "Java", "JavaScript", "JavaScript", "Java"}

String[] unique = {"C", "Ruby"} 
我试过几种方法,但都做不到

public static void main(String[] args) {

        String[] a = { "Java","C", "JavaScript", "JavaScript", "Java" ,"Java", "Java" , "JavaScript", "Java", "Ruby"};

         List<String> uniq = new ArrayList<String>();
         List<String> dupe = new ArrayList<String>();

        int count = 0;
        for (int j = 0; j < a.length; j++) {
            for (int k = j + 1; k < a.length; k++) {
                if (a[j] == a[k]) {
                    count++;
                }
            }
            if (count == 1){
                System.out.println("Dupe: "+a[j]);
                dupe.add(a[j]);
            } 
            count = 0;

        }
    }
这可能对你有帮助

它表示可以使用集合创建输入数组唯一值的集合,如:

int length= a.length;
Set<String> set = new HashSet<String>();

for(int i = 0; i < length; i++){
  set.add(a[i]);
}

这两个命令的最终结果都是
arrayList
只包含
a
最初拥有的重复值,而
set
只包含a的唯一值。

您可以使用
收集器在一次迭代中完成此操作。partitioning by
但返回类型将是
Map


下面的代码将为您提供一个带有字符串的映射以及它出现的次数:

import java.util.HashMap;
import java.util.Map;

public class TestSample {
    public static void main(String[] args) {
        String[] values =
                { "Java", "C", "JavaScript", "JavaScript", "Java", "Java", "Java", "JavaScript", "Java", "Ruby" };

        Map<String, Integer> decisionMap = new HashMap<>();
        for (String str : values) {
            if (decisionMap.containsKey(str)) {
                decisionMap.put(str, decisionMap.get(str) + 1);
                continue;
            }
            decisionMap.put(str, 0);
        }

        System.out.println(decisionMap.toString());

    }
}
import java.util.HashMap;
导入java.util.Map;
公共类测试样本{
公共静态void main(字符串[]args){
字符串[]值=
{“Java”、“C”、“JavaScript”、“JavaScript”、“Java”、“Java”、“Java”、“JavaScript”、“Java”、“Ruby”};
Map decisionMap=newhashmap();
for(字符串str:values){
if(决策图容器(str)){
decisionMap.put(str,decisionMap.get(str)+1);
继续;
}
决策图put(str,0);
}
System.out.println(decisionMap.toString());
}
}
唯一字符串的键上将有0。
现在,您可以选择自己喜欢的打印方式。

可能不是最有效的,但有一种方法:

// input: String []  a
// initialize empty:
Set<String> u = new HashSet<>(a.length);
// initialize with all values of a:
List<String> d = new ArrayList<>(Arrays.asList(a));
for(String s:a) {
  if (u.add(a)) {// s is added to u for the first time:
    d.remove(a);
  } else { // s is duplicate in u:
    u.remove(a);
  }
}
String [] us = u.toArray(new String[0]);
String [] ds = d.toArray(new String[0]); 
//输入:字符串[]a
//初始化为空:
Set u=新哈希集(a.长度);
//使用以下参数的所有值初始化:
列表d=新的ArrayList(Arrays.asList(a));
for(字符串s:a){
如果(u.add(a)){//s第一次添加到u:
d、 删除(a);
}否则{//s在u中重复:
u、 删除(a);
}
}
字符串[]us=u.toArray(新字符串[0]);
字符串[]ds=d.toArray(新字符串[0]);

…利用集合的特征(元素唯一性)和
set.add():布尔
方法,当“集合被添加操作修改”时,该方法发出
true

要打印唯一值,可以使用收集框架

    HashSet<String> h = new HashSet<String>(); 
   //Adding elements into HashSet add() 
   for(int i = 0; i < length; i++)
   {
   h.add(a[i]);           //adding element in the set
   }
      // Iterating over hash set items 
   for (String i : h)
   {  
      System.out.println(i);     //printing unique elements  
    }
HashSet h=newhashset();
//将元素添加到HashSet add()中
for(int i=0;i
这是另一种使用java 8的方法

public class Test {
    public static void main(String[] args) {
        String[] values = { "Java", "C", "JavaScript", "JavaScript", "Java", "Java", "Java", "JavaScript", "Java",
                "Ruby" };
        List<String> l = new LinkedList<>(Arrays.asList(values));// you can not use List<String> l = Arrays.asList(values); because we will be removing the duplicate values later so you will get java.lang.UnsupportedOperationException
        Set<String> allItems = new HashSet<String>();
        List<String> duplicates = Arrays.stream(values).filter(n -> !allItems.add(n)).collect(Collectors.toList());
        System.out.println(duplicates);//this will print all the duplicate values
        l.removeAll(duplicates);// input=duplicate+unique so removing the duplicate will give the unique values
        System.out.println(l);

    }

}

你知道电视机是怎么工作的吗?我建议你看看是的。但它将为所有值创建唯一的列表。但我需要单独的清单。是的,看看sets@User输出中的顺序重要吗?“通过将原始数组a转换为ArrayList”-措辞错误看起来不错,但不是最佳解决方案,因为您有O(n^2)
import java.util.HashMap;
import java.util.Map;

public class TestSample {
    public static void main(String[] args) {
        String[] values =
                { "Java", "C", "JavaScript", "JavaScript", "Java", "Java", "Java", "JavaScript", "Java", "Ruby" };

        Map<String, Integer> decisionMap = new HashMap<>();
        for (String str : values) {
            if (decisionMap.containsKey(str)) {
                decisionMap.put(str, decisionMap.get(str) + 1);
                continue;
            }
            decisionMap.put(str, 0);
        }

        System.out.println(decisionMap.toString());

    }
}
// input: String []  a
// initialize empty:
Set<String> u = new HashSet<>(a.length);
// initialize with all values of a:
List<String> d = new ArrayList<>(Arrays.asList(a));
for(String s:a) {
  if (u.add(a)) {// s is added to u for the first time:
    d.remove(a);
  } else { // s is duplicate in u:
    u.remove(a);
  }
}
String [] us = u.toArray(new String[0]);
String [] ds = d.toArray(new String[0]); 
    HashSet<String> h = new HashSet<String>(); 
   //Adding elements into HashSet add() 
   for(int i = 0; i < length; i++)
   {
   h.add(a[i]);           //adding element in the set
   }
      // Iterating over hash set items 
   for (String i : h)
   {  
      System.out.println(i);     //printing unique elements  
    }
public class Test {
    public static void main(String[] args) {
        String[] values = { "Java", "C", "JavaScript", "JavaScript", "Java", "Java", "Java", "JavaScript", "Java",
                "Ruby" };
        List<String> l = new LinkedList<>(Arrays.asList(values));// you can not use List<String> l = Arrays.asList(values); because we will be removing the duplicate values later so you will get java.lang.UnsupportedOperationException
        Set<String> allItems = new HashSet<String>();
        List<String> duplicates = Arrays.stream(values).filter(n -> !allItems.add(n)).collect(Collectors.toList());
        System.out.println(duplicates);//this will print all the duplicate values
        l.removeAll(duplicates);// input=duplicate+unique so removing the duplicate will give the unique values
        System.out.println(l);

    }

}
[JavaScript, Java, Java, Java, JavaScript, Java]
[C, Ruby]