20

我有一个数组,我想从中删除重复项。

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<String> set = new HashSet<String>();
Collections.addAll(set, trimmedArray);

System.out.println(set);

但这并没有给我数组中的唯一值。

我的数组:- {English, French, Japanese, Russian, Chinese Subtitles,English, French, Japanese, Russian, Chinese Subtitles}

输出:- [日文、俄文、法文、中文字幕]、中文字幕、[英文、英文]

4

13 回答 13

55

您可以在 java 7 中的一行中做到这一点:

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

在 java 8 中更短更简单:

String[] unique = Arrays.stream(array).distinct().toArray(String[]::new);
于 2012-12-10T08:15:30.937 回答
3

HashSet 将完成这项工作。

你可以试试这个:

List<String> newList = new ArrayList<String>(new HashSet<String>(oldList));
于 2015-10-27T08:43:50.887 回答
3

如果您不想使用 Hashset 或上面提到的 Java8 中的新方法,您可以编写此代码,您只需要首先对数组进行排序,以便相似的值彼此相邻,然后计算相邻单元格中不同对的数量.

    public static int solution(int[] A) {
    int count = 1;
    Arrays.sort(A);
    for (int i = 1; i < A.length - 1; i++) {
        if (A[i] != A[i + 1]) {
            count++;
        }
    }
    return count;
}
于 2019-02-17T03:30:06.427 回答
2

使用 Java 8 的 Stream API,这是一个具有通用 Array 类型的解决方案:

public static <T> T[] makeUnique(T... values)
{
    return Arrays.stream(values).distinct().toArray(new IntFunction<T[]>()
    {

        @Override
        public T[] apply(int length)
        {
            return (T[]) Array.newInstance(values.getClass().getComponentType(), length);
        }

    });
}

它适用于任何 Object 类型的数组,但不适用于原始数组。

对于原始数组,它看起来像这样:

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

最后是一个小单元测试:

@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 }));
}
于 2016-09-27T18:11:01.053 回答
0

你可以得到两套,一套有所有的字幕,另一套有重复的

String[] trimmedArray = new String[items.length];
Set<String> subtitles = new HashSet<String>();
Set<String> duplicatedSubtitles = new HashSet<String>();

foreach(String subtitle : trimmedArray){
    subtitle = subtitle.trim();
    if(subtitles.contains(subtitle)){
        duplicatedSubtitles.add(subtitle);
    }
    subtitles.add(subtitle);
}
于 2012-12-10T08:07:36.287 回答
0

试试这个

Set<String> set = new HashSet<String>();

打电话给这个

set.addAll(trimmedArray);
于 2012-12-10T08:09:41.573 回答
0

为什么先将项目添加到数组中,然后将其转换为字符串?只需遍历 tha 数组并将它们复制到 Set。然后打印新创建的包含唯一值的集合。

Set<String> set = new HashSet<String>();
for (int i = 0; i < al.length; i++) {
    set.add(al[i]);
}

for (String str : set) {
    System.out.println(str);
}
于 2012-12-10T08:12:34.640 回答
0

此代码将从数组中计算不同的元素,然后找到它们的出现。并计算百分比并将其保存到 hashmap。

int _occurrence = 0;
        String[] _fruits = new String[] {"apple","apple","banana","mango","orange","orange","mango","mango","banana","banana","banana","banana","banana"};
        List<String> _initialList = Arrays.asList(_fruits);
        Set<String> treesetList = new TreeSet<String>(_initialList);
        String[] _distinct =  (String[]) treesetList.toArray(new String[0]);

        HashMap<String,String> _map = new HashMap<String,String>();
        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);
于 2013-06-07T13:43:05.437 回答
0

让我们看看如何从数组中找到不同的值。

  public class Distinct  {
        public static void main(String args[]) {
             int num[]={1,4,3,2,6,7,4,2,1,2,8,6,7};
                for(int i=0; i<num.length; i++){
                    boolean isdistinct = true;
                    for(int j=0; j<i; j++){
                        if(num[i] == num[j]){
                            isdistinct =false;
                            break;
                        }
                   }
                    if(isdistinct){
                        System.out.print(num[i]+" ");
                    }
               }
           }
     }
于 2018-11-01T11:09:22.377 回答
0

如果您的阵列满足这两个条件 - :

  1. 只允许重复和单个值(不允许三次或更多)

  2. 数组中应该只有一个唯一值

     // Use Bitwise 'exclusive or' operator to find unique value 
     int result = array[0];
     for (int i = 1; i < array.length; i++) {
         result  ^= array[i];
     }
     System.out.println(result);
    

    } }

于 2021-06-21T02:50:32.980 回答
0
public static int[] findAndReturnUniqueIntArray(int[] arr) {
    int[] distinctElements = {};
    int newArrLength = distinctElements.length;
    for (int i = 0; i < arr.length; i++) {
        boolean exists = false;
        if (distinctElements.length == 0) {
            distinctElements = new int[1];
            distinctElements[newArrLength] = arr[i];
            newArrLength++;
        }

        else {
            for (int j = 0; j < distinctElements.length; j++) {
                if (arr[i] == distinctElements[j]) {
                    exists = true;
                    break;
                }
            }
            if (exists == false) {
                distinctElements = Arrays.copyOf(distinctElements, distinctElements.length+1);
                distinctElements[distinctElements.length-1] = arr[i];
                newArrLength++;
                exists = false;
            }
        }
    }
    return distinctElements;
}
于 2019-04-05T17:56:19.043 回答
0
int arr[] = {1,1,2,2,3,3,4,5,5,6}; 
for(int i=0; i<arr.length; i++) {
int count = 0;
    for(int j=0; j<arr.length; j++) {
        if ((arr[i] == arr[j]) && (i!=j)) {
            count++ ;
        }
    }
        if(count==0) {
            System.out.println(arr[i]);
        }
}
于 2019-03-23T22:14:09.287 回答
-1

在 python 中,您可以使用 Set。

s = Set()
data_list = [1,2,3,4]
s.update(data_list)
于 2019-02-28T10:05:09.553 回答