Stream系列(七)distinct方法使用
EmployeeTestCase.java
package com.example.demo; import lombok.Data; import lombok.ToString; import lombok.extern.log4j.Log4j2; import one.util.streamex.StreamEx; import org.junit.Test; import java.util.Collection; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.LongStream; import java.util.stream.Stream; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @Log4j2 public class EmployeeTestCase extends BaseTest{ @Test public void distinct() { //常规实现方式 List<Employee> employeesDis = list.stream().distinct().collect(Collectors.toList()); assertEquals(employeesDis.size(),5); //StreamEx 实现方式 List<Employee> employeesDisBySalary2 = StreamEx.of(list).distinct(Employee::getSalary) .peek(System.out::println).collect(Collectors.toList()); //Stream filter 实现方式 List<Employee> employeesDisBySalary = list.stream().filter(distinctByKey(Employee::getSalary)) .collect(Collectors.toList()); assertEquals(employeesDisBySalary,employeesDisBySalary2); } private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) { Map<Object,Boolean> seen = new ConcurrentHashMap<>(); return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; } }
BaseTest.java
package com.example.demo; import java.util.Arrays; import java.util.List; public class BaseTest { protected static final List<Employee> list = Arrays.asList( new Employee(1, "Alex", 1000), new Employee(2, "Michael", 2000), new Employee(3, "Jack", 1500), new Employee(4, "Owen", 1500), new Employee(5, "Denny", 2000)); protected static final List<List<Employee>> listFlat = Arrays.asList( Arrays.asList(new Employee(1, "Alex", 1000), new Employee(2, "Michael", 2000)), Arrays.asList(new Employee(3, "Jack", 1500), new Employee(4, "Owen", 1500)), Arrays.asList(new Employee(5, "Denny", 2000))); }
版权声明:本文为JavaWeiBianCheng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。