Cómo obtener valores únicos de una matriz

Tengo una matriz desde la que quiero eliminar elementos duplicados.

for(int data1=startpos;data1<=lastrow;data1++) { String movie_soundtrk=cells.getCell(data1,Mmovie_sndtrk_cl).getValue().toString(); al.add(movie_soundtrk); } String commaSeparated=al.toString(); String [] items = commaSeparated.split(","); String[] trimmedArray = new String[items.length]; for (int i = 0; i < items.length; i++) { trimmedArray[i] = items[i].trim(); } Set set = new HashSet(); Collections.addAll(set, trimmedArray); System.out.println(set); 

Pero esto no me está dando valores únicos de Array.

Mi matriz: – {subtítulos en inglés, francés, japonés, ruso, chino, subtítulos en inglés, francés, japonés, ruso y chino}

Out Put: – [Subtítulos en japonés, ruso, francés y chino], subtítulos en chino, [inglés, inglés]

Puedes hacerlo en una línea en java 7:

 String[] unique = new HashSet(Arrays.asList(array)).toArray(new String[0]); 

y más corto y más simple en java 8:

 String[] unique = Arrays.stream(array).distinct().toArray(String[]::new); 

HashSet hará el trabajo.

Puedes intentar esto:

 List newList = new ArrayList(new HashSet(oldList)); 

Usando Stream API de Java 8, esta es una solución con un tipo de matriz genérico:

 public static  T[] makeUnique(T... values) { return Arrays.stream(values).distinct().toArray(new IntFunction() { @Override public T[] apply(int length) { return (T[]) Array.newInstance(values.getClass().getComponentType(), length); } }); } 

Funciona para cualquier matriz de tipo Objeto, pero no para matrices primitivas.

Para arreglos primitivos se ve así:

 public static int[] makeUnique(int... values) { return Arrays.stream(values).distinct().toArray(); } 

Y finalmente aquí hay una pequeña prueba unitaria:

 @Test public void testMakeUnique() { assertArrayEquals(new String[] { "a", "b", "c" }, makeUnique("a", "b", "c", "b", "a")); assertArrayEquals(new Object[] { "a", "b", "c" }, makeUnique(new Object[] { "a", "b", "c", "b", "a" })); assertArrayEquals(new Integer[] { 1, 2, 3, 4, 5 }, makeUnique(new Integer[] { 1, 2, 2, 3, 3, 3, 1, 4, 5, 5, 5, 1 })); assertArrayEquals(new int[] { 1, 2, 3, 4, 5 }, makeUnique(new int[] { 1, 2, 2, 3, 3, 3, 1, 4, 5, 5, 5, 1 })); } 

Podría obtener dos juegos, uno con todos los subtítulos y el otro con los duplicados

 String[] trimmedArray = new String[items.length]; Set subtitles = new HashSet(); Set duplicatedSubtitles = new HashSet(); foreach(String subtitle : trimmedArray){ subtitle = subtitle.trim(); if(subtitles.contains(subtitle)){ duplicatedSubtitles.add(subtitle); } subtitles.add(subtitle); } 

Prueba en lugar de esto

 Set set = new HashSet(); 

llamar esto

 set.addAll(trimmedArray); 

¿Por qué primero agregaste elementos en la matriz y luego lo convirtiste en una cadena? Simplemente itere sobre la matriz y cópielos en Conjunto. Luego imprima un nuevo conjunto creado que contenga valores únicos.

 Set set = new HashSet(); for (int i = 0; i < al.length; i++) { set.add(al[i]); } for (String str : set) { System.out.println(str); } 

Este código calculará distintos elementos de una matriz y luego encontrará su ocurrencia. Y calcula el porcentaje y lo guarda en hashmap.

 int _occurrence = 0; String[] _fruits = new String[] {"apple","apple","banana","mango","orange","orange","mango","mango","banana","banana","banana","banana","banana"}; List _initialList = Arrays.asList(_fruits); Set treesetList = new TreeSet(_initialList); String[] _distinct = (String[]) treesetList.toArray(new String[0]); HashMap _map = new HashMap(); int _totalElement = _fruits.length; for(int x=0;x<_distinct.length;x++){ for(int i=0;i<_fruits.length;i++){ if(_distinct[x].equals(_fruits[i])){ ++_occurrence; } } double _calPercentage = Math.round((((double)_occurrence/(double)_totalElement)*100)); _map.put(_distinct[x], String.valueOf(_calPercentage+"%")); _occurrence = 0; } System.out.println(_map);