我有一个数组,我想从中删除重复项目。
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);
但这并没有给我Array中的唯一值。
我的数组: - {英文,法文,日文,俄文,中文字幕,英文,法文,日文,俄文,中文字幕}
输出: - [日语,俄语,法语,中文字幕],中文字幕,[英语,英语]
答案 0 :(得分:40)
你可以在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);
答案 1 :(得分:3)
HashSet将完成这项工作。
你可以试试这个:
List<String> newList = new ArrayList<String>(new HashSet<String>(oldList));
答案 2 :(得分:1)
使用Java 8的Stream API,这是一个具有通用数组类型的解决方案:
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 }));
}
答案 3 :(得分: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);
}
答案 4 :(得分:0)
尝试代替此
Set<String> set = new HashSet<String>();
调用此
set.addAll(trimmedArray);
答案 5 :(得分:0)
为什么首先将项添加到数组中然后将其转换为字符串?只需遍历tha数组并将它们复制到Set.Then打印新创建的包含唯一值的集合。
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);
}
答案 6 :(得分: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);
答案 7 :(得分: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]+" ");
}
}
}
}
答案 8 :(得分:0)
如果您不想使用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;
}
答案 9 :(得分:0)
在python中,您可以使用Set。
s = Set()
data_list = [1,2,3,4]
s.update(data_list)
答案 10 :(得分: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]);
}
}
答案 11 :(得分: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;
}
答案 12 :(得分:0)
如果你的数组满足这两个条件 -:
只允许重复和单个值(不允许重复三次或更多)
数组中应该只有一个唯一值
// 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);
} }