java list 汇总_List集合去重各种方式汇总

packagecom.sb.test;import java.util.*;importjava.util.concurrent.ConcurrentHashMap;importjava.util.function.Function;importjava.util.function.Predicate;importjava.util.stream.Collectors;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importcom.alibaba.fastjson.JSON;/***@version1.0.

* @className :MyTest

* @Date :2019/10/2

**/

public classMyTest {public final static Logger logger = LoggerFactory.getLogger(MyTest.class);public static voidmain(String[] args) {

logger.info("------------List String 去重---------------------");

List list = new ArrayList<>();

list.add("123");

list.add("432");

list.add("123");

list.stream().forEach(str->System.out.println(str));

Set set = new HashSet<>(list);

list.clear();

list.addAll(set);

list.stream().forEach(str->System.out.println(str));

logger.info("*****************List 去重***********************************");

List list2 = new ArrayList<>();

TestModel testModel= newTestModel();

testModel.setAge(11);

testModel.setName("我爱你中国");

TestModel testModel2= newTestModel();

testModel2.setAge(11);

testModel2.setName("我爱你中国");

list2.add(testModel);

list2.add(testModel2);

list2.stream().forEach(item->{

logger.info(item.getName()+item.getAge());

});

logger.info("---------------根据对象的某个属性去重,例如:age-------------------------");

List listNew = new ArrayList<>();

Set testModelSet = new TreeSet<>((o1, o2) ->o1.getAge().compareTo(o2.getAge()));

testModelSet.addAll(list2);

listNew.addAll(testModelSet);

listNew.stream().forEach(item11->{

logger.info(item11.getName()+item11.getAge());

});

logger.info("----------------根据对象多个属性去重 属性:age + name--------------");

List listNew2 = new ArrayList<>();

List testModels =removeDupliByMoreModel(list2);

logger.info(JSON.toJSONString(testModels));

logger.info("----------------根据对象单个属性去重属性:name--------------");

List testModels1 =removeDupliByNameNew(list2);

logger.info(JSON.toJSONString(testModels1));

}/*** List集合去重*/

public static List removeDupliByMoreModel(Listlist) {

List listModel =list.stream().collect(Collectors

.collectingAndThen(Collectors.toCollection(()-> new TreeSet<>(Comparator.comparing(o ->{return (o.getAge() + "-" +o.getName());

}))), ArrayList::new));return new ArrayList<>(listModel);

}/*** 根据对象单个属性去重属性:name*/

public static List removeDupliByNameNew(Listlist) {

List personList = new ArrayList<>();

list.stream().filter(distinctByKey(p-> p.getName())).forEach(p ->personList.add(p));returnpersonList;

}/*** 据key去重重复*/

public static Predicate distinctByKey(Function super T, Object>keyExtractor) {

Map map = new ConcurrentHashMap<>();return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值