Created
February 6, 2018 08:08
-
-
Save circlee/d216b0fcbdaf6f2e9e8e5fa27c01de55 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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