Skip to content

Instantly share code, notes, and snippets.

@circlee
Created February 6, 2018 08:08
Show Gist options
  • Save circlee/d216b0fcbdaf6f2e9e8e5fa27c01de55 to your computer and use it in GitHub Desktop.
Save circlee/d216b0fcbdaf6f2e9e8e5fa27c01de55 to your computer and use it in GitHub Desktop.
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.IntStream;
public class Test{
public static <T> Predicate<T> distinctByKey( Function<? super T, Object> keyExtractor) {
Map<Object, Boolean> map = new HashMap<>();
return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
public static void main(String[] args) {
List<Member> memberList = new ArrayList<>();
IntStream.range(13, 17)
.forEach(i -> {
memberList.add(new Member("aa" + i, i));
});
IntStream.range(10, 20)
.forEach(i -> {
memberList.add(new Member("unknown_" + i, i));
});
memberList.stream()
.filter(distinctByKey(m -> m.getAge()))
.sorted( new Comparator<Member>() {
public int compare(Member o1, Member o2) {
// TODO Auto-generated method stub
return Long.compare(o1.getAge(), o2.getAge());
}
})
.forEach(System.out::println);
}
public static class Member {
private String name;
private long age;
public Member(String name, long age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getAge() {
return age;
}
public void setAge(long age) {
this.age = age;
}
@Override
public String toString() {
return "Member [name=" + name + ", age=" + age + "]";
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment