JAVA List<String> 去重复

本文介绍了如何在Java集合框架中高效地去除List中的重复元素,通过使用Set数据结构实现,提供了一种简洁且性能良好的解决方案。此外,还对比了传统方法与使用Set的效率差异,展示了使用Set进行去重的优势。
List<String> providerApps = providerService.findApplications();

// 要在providerApps中去掉重复的

List<String> tmp = new ArrayList<String>();

for (String provider : providerApps) {
	if (!tmp.contains(provider)) {
		tmp.add(provider);

                // 这样就好了,以下该干嘛干嘛
                ......
                ......
        }
}

 

 

更好的方法:直接将List放到Set中

 

public static void main(String[] args) {
		List<String> apps = new ArrayList<String>();
		apps.add("app1");
		apps.add("app1");
		apps.add("app2");
		apps.add("app3");
		
		Set<String> appset = new TreeSet<String>();
		appset.addAll(apps);

		List<String> tmp = new ArrayList<String>();
		tmp.addAll(appset);
		
		for(String s : tmp) {
			System.out.println("###### " + s);
		}
	}

 结果:

###### app1

###### app2

###### app3

 

Java中,使用Stream API检查`List<String>`是否存在复项可以通过多种方式实现。以下是几种常见且有效的方法: ### 方法1:使用 `distinct()` 和 `count()` 通过将列表转换为流,并使用 `distinct()` 方法获取去后的流,再比较原始流和去后流的大小来判断是否存在复项。 ```java import java.util.*; import java.util.stream.*; public class DuplicateChecker { public static boolean hasDuplicates(List<String> list) { return list.stream().distinct().count() != list.size(); } public static void main(String[] args) { List<String> stringList = Arrays.asList("apple", "banana", "apple", "orange"); System.out.println(hasDuplicates(stringList)); // 输出: true } } ``` ### 方法2:使用 `Collectors.groupingBy()` 统计频率 通过分组统计每个字符串出现的次数,然后检查是否有任何元素的频率大于1。 ```java import java.util.*; import java.util.stream.*; import java.util.function.Function; public class DuplicateChecker { public static boolean hasDuplicates(List<String> list) { return list.stream() .collect(Collectors.groupingBy(Function.identity(), Collectors.counting())) .values() .stream() .anyMatch(count -> count > 1); } public static void main(String[] args) { List<String> stringList = Arrays.asList("apple", "banana", "apple", "orange"); System.out.println(hasDuplicates(stringList)); // 输出: true } } ``` ### 方法3:使用 `Set` 集合检测复 利用 `Set` 集合特性,尝试将所有元素添加到 `Set` 中,如果集合的大小小于原列表,则说明存在复项。 ```java import java.util.*; import java.util.stream.*; public class DuplicateChecker { public static boolean hasDuplicates(List<String> list) { Set<String> set = new HashSet<>(); return list.stream().anyMatch(s -> !set.add(s)); } public static void main(String[] args) { List<String> stringList = Arrays.asList("apple", "banana", "apple", "orange"); System.out.println(hasDuplicates(stringList)); // 输出: true } } ``` ### 方法4:返回复项的具体值 如果你不仅想检查是否存在复项,还想获取具体哪些值是复的,可以使用以下方法: ```java import java.util.*; import java.util.stream.*; import java.util.function.Function; public class DuplicateChecker { public static Set<String> getDuplicateElements(List<String> list) { return list.stream() .collect(Collectors.groupingBy(Function.identity(), Collectors.counting())) .entrySet() .stream() .filter(entry -> entry.getValue() > 1) .map(Map.Entry::getKey) .collect(Collectors.toSet()); } public static void main(String[] args) { List<String> stringList = Arrays.asList("apple", "banana", "apple", "orange"); Set<String> duplicates = getDuplicateElements(stringList); System.out.println(duplicates); // 输出: [apple] } } ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值