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;
}
}