commit
eeb89df150
|
@ -186,11 +186,11 @@
|
||||||
<artifactId>rome</artifactId>
|
<artifactId>rome</artifactId>
|
||||||
<version>${rome.version}</version>
|
<version>${rome.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.specto</groupId>
|
<groupId>io.specto</groupId>
|
||||||
<artifactId>hoverfly-java</artifactId>
|
<artifactId>hoverfly-java</artifactId>
|
||||||
<version>0.8.0</version>
|
<version>0.8.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.httpcomponents</groupId>
|
<groupId>org.apache.httpcomponents</groupId>
|
||||||
<artifactId>httpclient</artifactId>
|
<artifactId>httpclient</artifactId>
|
||||||
|
@ -385,7 +385,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>one.util</groupId>
|
<groupId>one.util</groupId>
|
||||||
<artifactId>streamex</artifactId>
|
<artifactId>streamex</artifactId>
|
||||||
<version>0.6.5</version>
|
<version>${streamex.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jooq</groupId>
|
<groupId>org.jooq</groupId>
|
||||||
|
@ -472,11 +472,16 @@
|
||||||
<artifactId>noexception</artifactId>
|
<artifactId>noexception</artifactId>
|
||||||
<version>1.1.0</version>
|
<version>1.1.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.eclipse.collections</groupId>
|
<groupId>org.eclipse.collections</groupId>
|
||||||
<artifactId>eclipse-collections</artifactId>
|
<artifactId>eclipse-collections</artifactId>
|
||||||
<version>${eclipse-collections.version}</version>
|
<version>${eclipse-collections.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.vavr</groupId>
|
||||||
|
<artifactId>vavr</artifactId>
|
||||||
|
<version>${vavr.version}</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<properties>
|
<properties>
|
||||||
<multiverse.version>0.7.0</multiverse.version>
|
<multiverse.version>0.7.0</multiverse.version>
|
||||||
|
@ -519,6 +524,8 @@
|
||||||
<bytebuddy.version>1.7.1</bytebuddy.version>
|
<bytebuddy.version>1.7.1</bytebuddy.version>
|
||||||
<pcollections.version>2.1.2</pcollections.version>
|
<pcollections.version>2.1.2</pcollections.version>
|
||||||
<rome.version>1.0</rome.version>
|
<rome.version>1.0</rome.version>
|
||||||
<eclipse-collections.version>8.2.0</eclipse-collections.version>
|
<eclipse-collections.version>8.2.0</eclipse-collections.version>
|
||||||
|
<streamex.version>0.6.5</streamex.version>
|
||||||
|
<vavr.version>0.9.0</vavr.version>
|
||||||
</properties>
|
</properties>
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
package com.baeldung.distinct;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
|
public class DistinctWithJavaFunction {
|
||||||
|
|
||||||
|
public 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,65 @@
|
||||||
|
package com.baeldung.distinct;
|
||||||
|
|
||||||
|
public class Person {
|
||||||
|
int age;
|
||||||
|
String name;
|
||||||
|
String email;
|
||||||
|
|
||||||
|
public Person(int age, String name, String email) {
|
||||||
|
super();
|
||||||
|
this.age = age;
|
||||||
|
this.name = name;
|
||||||
|
this.email = email;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getAge() {
|
||||||
|
return age;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getEmail() {
|
||||||
|
return email;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
builder.append("Person [age=");
|
||||||
|
builder.append(age);
|
||||||
|
builder.append(", name=");
|
||||||
|
builder.append(name);
|
||||||
|
builder.append(", email=");
|
||||||
|
builder.append(email);
|
||||||
|
builder.append("]");
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
final int prime = 31;
|
||||||
|
int result = 1;
|
||||||
|
result = prime * result + ((email == null) ? 0 : email.hashCode());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
Person other = (Person) obj;
|
||||||
|
if (email == null) {
|
||||||
|
if (other.email != null)
|
||||||
|
return false;
|
||||||
|
} else if (!email.equals(other.email))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
package com.baeldung.distinct;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.eclipse.collections.impl.block.factory.HashingStrategies;
|
||||||
|
import org.eclipse.collections.impl.utility.ListIterate;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class DistinctWithEclipseCollectionsUnitTest {
|
||||||
|
List<Person> personList;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void init() {
|
||||||
|
personList = PersonDataGenerator.getPersonListWithFakeValues();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenFilterListByName_thenSizeShouldBe4() {
|
||||||
|
List<Person> personListFiltered = ListIterate.distinct(personList, HashingStrategies.fromFunction(Person::getName));
|
||||||
|
assertTrue(personListFiltered.size() == 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenFilterListByAge_thenSizeShouldBe2() {
|
||||||
|
List<Person> personListFiltered = ListIterate.distinct(personList, HashingStrategies.fromIntFunction(Person::getAge));
|
||||||
|
assertTrue(personListFiltered.size() == 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
package com.baeldung.distinct;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
import static com.baeldung.distinct.DistinctWithJavaFunction.distinctByKey;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class DistinctWithJavaFunctionUnitTest {
|
||||||
|
List<Person> personList;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void init() {
|
||||||
|
personList = PersonDataGenerator.getPersonListWithFakeValues();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenFilterListByName_thenSizeShouldBe4() {
|
||||||
|
List<Person> personListFiltered = personList.stream()
|
||||||
|
.filter(distinctByKey(p -> p.getName()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
assertTrue(personListFiltered.size() == 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenFilterListByAge_thenSizeShouldBe2() {
|
||||||
|
List<Person> personListFiltered = personList.stream()
|
||||||
|
.filter(distinctByKey(p -> p.getAge()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
assertTrue(personListFiltered.size() == 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenFilterListWithDefaultDistinct_thenSizeShouldBe5() {
|
||||||
|
List<Person> personListFiltered = personList.stream()
|
||||||
|
.distinct()
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
assertTrue(personListFiltered.size() == 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
package com.baeldung.distinct;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import one.util.streamex.StreamEx;
|
||||||
|
|
||||||
|
public class DistinctWithStreamexUnitTest {
|
||||||
|
List<Person> personList;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void init() {
|
||||||
|
personList = PersonDataGenerator.getPersonListWithFakeValues();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenFilterListByName_thenSizeShouldBe4() {
|
||||||
|
List<Person> personListFiltered = StreamEx.of(personList)
|
||||||
|
.distinct(Person::getName)
|
||||||
|
.toList();
|
||||||
|
assertTrue(personListFiltered.size() == 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenFilterListByAge_thenSizeShouldBe2() {
|
||||||
|
List<Person> personListFiltered = StreamEx.of(personList)
|
||||||
|
.distinct(Person::getAge)
|
||||||
|
.toList();
|
||||||
|
assertTrue(personListFiltered.size() == 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
package com.baeldung.distinct;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class DistinctWithVavrUnitTest {
|
||||||
|
List<Person> personList;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void init() {
|
||||||
|
personList = PersonDataGenerator.getPersonListWithFakeValues();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenFilterListByName_thenSizeShouldBe4() {
|
||||||
|
List<Person> personListFiltered = io.vavr.collection.List.ofAll(personList)
|
||||||
|
.distinctBy(Person::getName)
|
||||||
|
.toJavaList();
|
||||||
|
assertTrue(personListFiltered.size() == 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenFilterListByAge_thenSizeShouldBe2() {
|
||||||
|
List<Person> personListFiltered = io.vavr.collection.List.ofAll(personList)
|
||||||
|
.distinctBy(Person::getAge)
|
||||||
|
.toJavaList();
|
||||||
|
assertTrue(personListFiltered.size() == 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
package com.baeldung.distinct;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class PersonDataGenerator {
|
||||||
|
|
||||||
|
public static List<Person> getPersonListWithFakeValues() {
|
||||||
|
// @formatter:off
|
||||||
|
return Arrays.asList(
|
||||||
|
new Person(20, "Jhon", "jhon@test.com"),
|
||||||
|
new Person(20, "Jhon", "jhon1@test.com"),
|
||||||
|
new Person(20, "Jhon", "jhon2@test.com"),
|
||||||
|
new Person(21, "Tom", "Tom@test.com"),
|
||||||
|
new Person(21, "Mark", "Mark@test.com"),
|
||||||
|
new Person(20, "Julia", "jhon@test.com"));
|
||||||
|
// @formatter:on
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue