MapStreamSyntax というクラスで基本的に static import して使います。
具体例を見てもらえばどの辺が便利なのか伝わるでしょうか?
// JDK標準APIのみ
public Map<Integer, String> Case1_Before(final Map<Integer, String> map) {
return map.entrySet().stream()
.filter(entry -> !entry.getValue().isEmpty())
.map(entry -> new SimpleImmutableEntry<>(entry.getKey(), entry.getValue().toUpperCase()))
.collect(toMap(Entry::getKey, Entry::getValue));
}
// MapStreamSyntax使用
public Map<Integer, String> Case1_After(final Map<Integer, String> map) {
return map.entrySet().stream()
.filter(byValue(value -> !value.isEmpty()))
.map(values(String::toUpperCase))
.collect(entryToMap());
}
// JDK標準APIのみ
public String Case2_Before(final Map<Integer, String> map) {
return map.entrySet().stream()
.map(entry -> entry.getKey() + " = " + entry.getValue())
.collect(joining(", "));
}
// MapStreamSyntax使用
public String Case2_After(final Map<Integer, String> map) {
return map.entrySet().stream()
.map(toAny((key, value) -> key + " = " + value))
.collect(joining(", "));
}
// JDK標準APIのみ
public Map<ID<User>, Name<Organization>> Case3_Before(final List<User> users) {
return users.stream()
.map(user -> new SimpleImmutableEntry<>(user.getId(), primaryOrganization(user)))
.filter(entry -> entry.getValue().isOpened())
.map(entry -> new SimpleImmutableEntry<>(entry.getKey(), entry.getValue().getName())))
.collect(toMap(Entry::getKey, Entry::getValue));
}
// MapStreamSyntax使用
public Map<ID<User>, Name<Organization>> Case3_After(final List<User> users) {
return users.stream()
.map(toEntry(User::getId, this::primaryOrganization))
.filter(byValue(Organization::isOpened))
.map(values(Organization::getName))
.collect(entryToMap());
}
// 関連コード
public static final class User {
private final ID<User> id;
private final Name<User> name;
// Constructor, Getter 省略
}
public static final class Organization {
private final ID<Organization> id;
private final Name<Organization> name;
private final boolean opened;
// Constructor, Getter 省略
}
// ちょっと重いので同じUserに対して何回も繰り返し呼びたくない
private Organization primaryOrganization(final User user) {...}
MIT License にしとくので適当にコピペして使ってください。