List 集合去重方式与 java8新特性stream去重
以下介绍五种 - 不同的方法去除 Java 中 ArrayList 中的重复数据
1、使用 LinkedHashSet 删除 arraylist 中的重复数据
LinkedHashSet 是在一个 ArrayList 删除重复数据的最佳方法。LinkedHashSet 在内部完成两件事:删除重复数据保持添加到其中的数据的顺序Java 示例使用 LinkedHashSet 删除 arraylist 中的重复项。在给定的示例中,numbersList 是包含整数的 arraylist,其中一些是重复的数字。搜索公纵号:MarkerHub,关注回复[ vue ]获取前后端入门教程!例如 1,3 和 5. 我们将列表添加到 LinkedHashSet,然后将内容返回到列表中。结果 arraylist 没有重复的整数。import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashSet;public class ArrayListExample
{public static void main(String[] args){ArrayList<Integer> numbersList = new ArrayList<>(Arrays.asList(1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8));System.out.println(numbersList);LinkedHashSet<Integer> hashSet = new LinkedHashSet<>(numbersList);ArrayList<Integer> listWithoutDuplicates = new ArrayList<>(hashSet);System.out.println(listWithoutDuplicates);}
}
输出结果[1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8][1, 2, 3, 4, 5, 6, 7, 8]
2、使用 java8 新特性 stream 进行 List 去重
要从 arraylist 中删除重复项,我们也可以使用 java 8 stream api。使用 steam 的 distinct() 方法返回一个由不同数据组成的流,通过对象的 equals()方法进行比较。收集所有区域数据 List 使用 Collectors.toList()。Java 程序,用于在不使用 Set 的情况下从 java 中的 arraylist 中删除重复项。import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;public class ArrayListExample
{public static void main(String[] args){ArrayList<Integer> numbersList = new ArrayList<>(Arrays.asList(1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8));System.out.println(numbersList);List<Integer> listWithoutDuplicates = numbersList.stream().distinct().collect(Collectors.toList());System.out.println(listWithoutDuplicates);}}
输出结果[1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8][1, 2, 3, 4, 5, 6, 7, 8]
3、利用 HashSet 不能添加重复数据的特性 由于 HashSet 不能保证添加顺序,所以只能作为判断条件保证顺序:
private static void removeDuplicate(List<String> list) {HashSet<String> set = new HashSet<String>(list.size());List<String> result = new ArrayList<String>(list.size());for (String str : list) {if (set.add(str)) {result.add(str);}}list.clear();list.addAll(result);
}
4、利用 List 的 contains 方法循环遍历, 重新排序, 只添加一次数据, 避免重复:
private static void removeDuplicate(List<String> list) {List<String> result = new ArrayList<String>(list.size());for (String str : list) {if (!result.contains(str)) {result.add(str);}}list.clear();list.addAll(result);
}
5、双重 for 循环去重```javascript
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < list.size(); j++) {
if(i!=j&&list.get(i)==list.get(j)) {
list.remove(list.get(j)); }
}
6 , 以下是代码测试 与结果展示
public class Stream02 {public static void main(String[] args) {System.out.println("使用 Java 7: ");// 计算空字符串List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");System.out.println("列表: " +strings);long count = getCountEmptyStringUsingJava7(strings);System.out.println("空字符数量为: " + count);count = getCountLength3UsingJava7(strings);System.out.println("字符串长度为 3 的数量为: " + count);// 删除空字符串List<String> filtered = deleteEmptyStringsUsingJava7(strings);System.out.println("筛选后的列表: " + filtered);// 删除空字符串,并使用逗号把它们合并起来String mergedString = getMergedStringUsingJava7(strings,",");System.out.println("合并字符串: " + mergedString);// 获取列表元素平方数List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);List<Integer> squaresList = getSquares(numbers);System.out.println("平方数列表: " + squaresList);List<Integer> integers = Arrays.asList(1,2,13,4,15,6,17,8,19);System.out.println("列表: " +integers);System.out.println("列表中最大的数 : " + getMax(integers));System.out.println("列表中最小的数 : " + getMin(integers));System.out.println("所有数之和 : " + getSum(integers));System.out.println("平均数 : " + getAverage(integers));// 输出10个随机数System.out.println("随机数: ");Random random = new Random();for(int i=0; i < 10; i++){System.out.println(random.nextInt());}System.out.println("使用 Java 8: ");System.out.println("列表: " +strings);count = strings.stream().filter(string->string.isEmpty()).count();System.out.println("空字符串数量为: " + count);count = strings.stream().filter(string -> string.length() == 3).count();System.out.println("字符串长度为 3 的数量为: " + count);filtered = strings.stream().filter(string ->!string.isEmpty()).collect(Collectors.toList());System.out.println("筛选后的列表: " + filtered);mergedString = strings.stream().filter(string ->!string.isEmpty()).collect(Collectors.joining(", "));System.out.println("合并字符串: " + mergedString);squaresList = numbers.stream().map( i ->i*i).distinct().collect(Collectors.toList());System.out.println("Squares List: " + squaresList);System.out.println("列表: " +integers);IntSummaryStatistics stats = integers.stream().mapToInt((x) ->x).summaryStatistics();System.out.println("列表中最大的数 : " + stats.getMax());System.out.println("列表中最小的数 : " + stats.getMin());System.out.println("所有数之和 : " + stats.getSum());System.out.println("平均数 : " + stats.getAverage());System.out.println("随机数: ");random.ints().limit(10).sorted().forEach(System.out::println);// 并行处理count = strings.parallelStream().filter(string -> string.isEmpty()).count();System.out.println("空字符串的数量为: " + count);}private static int getCountEmptyStringUsingJava7(List<String> strings){int count = 0;for(String string: strings){if(string.isEmpty()){count++;}}return count;}private static int getCountLength3UsingJava7(List<String> strings){int count = 0;for(String string: strings){if(string.length() == 3){count++;}}return count;}private static List<String> deleteEmptyStringsUsingJava7(List<String> strings){List<String> filteredList = new ArrayList<String>();for(String string: strings){if(!string.isEmpty()){filteredList.add(string);}}return filteredList;}private static String getMergedStringUsingJava7(List<String> strings, String separator){StringBuilder stringBuilder = new StringBuilder();for(String string: strings){if(!string.isEmpty()){stringBuilder.append(string);stringBuilder.append(separator);}}String mergedString = stringBuilder.toString();return mergedString.substring(0, mergedString.length()-1);}private static List<Integer> getSquares(List<Integer> numbers){List<Integer> squaresList = new ArrayList<Integer>();for(Integer number: numbers){Integer square = new Integer(number.intValue() * number.intValue());if(!squaresList.contains(square)){squaresList.add(square);}}return squaresList;}private static int getMax(List<Integer> numbers){int max = numbers.get(0);for(int i=1;i < numbers.size();i++){Integer number = numbers.get(i);if(number.intValue() > max){max = number.intValue();}}return max;}private static int getMin(List<Integer> numbers){int min = numbers.get(0);for(int i=1;i < numbers.size();i++){Integer number = numbers.get(i);if(number.intValue() < min){min = number.intValue();}}return min;}private static int getSum(List numbers){int sum = (int)(numbers.get(0));for(int i=1;i < numbers.size();i++){sum += (int)numbers.get(i);}return sum;}private static int getAverage(List<Integer> numbers){return getSum(numbers) / numbers.size();}
结果展示 java 7
java 8
List 集合去重方式与 java8新特性stream去重相关推荐
- java8新特性-stream对map集合进行过滤的方法
java8新特性-stream对map集合进行过滤的方法 stream对map集合进行过滤的方法
- Java8新特性Stream流详解
陈老老老板 说明:新的专栏,本专栏专门讲Java8新特性,把平时遇到的问题与Java8的写法进行总结,需要注意的地方都标红了,一起加油. 本文是介绍Java8新特性Stream流常用方法超详细教学 说 ...
- java8新特性stream流
参考自深蓝至尊的Java8 新特性之流式数据处理 一. 流式处理简介 在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式 ...
- java8新特性-Stream入门学习
上一篇介绍了Lambda的学习,如果对Lambda表达式还不清晰的同学可以戳一下这个链接:java8新特性-lambda表达式入门学习.java8除了提供了Lambda表达式,操作集合的Stream ...
- Java8新特性——Stream流:不同于IO流的流,操作集合数据
文章目录 Stream流 1.认识Stream流(源码说明) 1.1.Stream流和Collection的区别 1.2.流的获取方式 1.3.流操作和管道 1.4.并行性 1.5.不干扰内政 1.6 ...
- 【Stream】java8新特性Stream流总结
一.什么是stream 在 java8 中增加了一个新的抽象接口 Stream API,使用 Stream 操作集合类似于使用 SQL 语句数据库查找数据类似,提供直观的方法进行操作. Stream ...
- 夯实基础,Java8新特性Stream详细教程
1 基本特性 Java8的API中添加了一个新的特性: 流,即stream.stream是将数组或者集合的元素视为流,流在管道中流动过程中,对数据进行筛选.排序和其他操作. 1.1 流的特性 stre ...
- java8新特性-stream学习
java8除了提供了Lambda表达式,操作集合的Stream API也是新特性中最值得学习和掌握的,它大大简化了,我们操作数据集合的代码量的书写.简单来说Stream是一个抽象概念,可以通过查找,过 ...
- Java8新特性Stream的常见用法
目录 Stream简介 Stream的使用 创建流 (1) 通过Stream.of()将元素转化成流 (2)每个集合都可以通过调用 stream() 方法来产生一个流 使用举例 (1) 遍历/匹配(f ...
最新文章
- python简单代码input-python基础 input()函数
- Android ActionBar完全解析,使用官方推荐的最佳导航栏(上)
- 获取网站Alexa排名数值的方法
- python 全文搜索 句子_python新玩法:用python进行文章摘要拿取,只需要一行代码
- Android Serializable与Parcelable原理与区别
- 苹果mac投屏软件:AirServer
- FloatingActionButton
- 三菱FX5U rtu方式通讯两台施耐德ATV320变频器
- java获取url后缀,以及判断是否带参数(?params=xxx)
- 使用Python进行IP地址查询
- win10删除账户文件夹(C:\Users\***)后,无法登录账户的解决方法
- 电饭锅鸿蒙系统,有了美的轻食电饭煲,人们更加确定了做饭工具的重要性
- Switch上gamemaker,6.11发售,可不写代码创造游戏
- 虚拟机运行安卓ISO
- Linux中ifconfig command not found
- 实现Web端指纹登录
- android hid自动重连,Android Bluetooth HID
- Joint Coronary Centerline Extraction and Lumen Segmentation from CCTA CNNTracker and Vascular Grap
- 【jQuery】 # jQuery选择器
- 2016百度之星 - 测试赛 1002 列变位法解密 (模拟)