import java.util.Comparator;
import java.util.Optional;
public class Main {
public static void main
(String[] args
) {
SampleHeroes heroes = new SampleHeroes(
new Hero("鈴木", 10),
new Hero("佐藤", 30),
new Hero("斎藤", 20)
);
Optional<Hero> hopt = heroes.stream().max((x,y)->x.hp-y.hp);
if(hopt.isPresent()) {
System.
out.
println("最大HPの勇者は" + hopt.
get().
name); }
}
}
//
// ほんとはきっと java.util.List<Hero>
//
class SampleHeroes {
private final Hero[] heroes;
public SampleHeroes(Hero... heroes) {
this.heroes = heroes;
}
//
// heroes.stream()
//
SampleStream stream() {
return new SampleStream(heroes);
}
}
//
// ほんとはきっと java.util.stream.Stream<Hero>
//
class SampleStream {
private final Hero[] heroes;
SampleStream(Hero[] heroes) {
this.heroes = heroes;
}
//
// heroes.stream().max()
//
public Optional<Hero> max(Comparator<Hero> comp) {
Hero max = heroes[0];
for (int i = 1; i < heroes.length; i ++) {
// (x,y) -> x.hp - y.hp で大小比較
if (comp.compare(heroes[i], max) > 0) {
max = heroes[i];
}
}
return Optional.of(max);
}
}
class Hero {
final int hp;
this.name = name;
this.hp = hp;
}
}
CmltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKCnB1YmxpYyBjbGFzcyBNYWluIHsKCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CgoJCVNhbXBsZUhlcm9lcyBoZXJvZXMgPSBuZXcgU2FtcGxlSGVyb2VzKAoJCQluZXcgSGVybygi6Yi05pyoIiwgMTApLAoJCQluZXcgSGVybygi5L2Q6JekIiwgMzApLAoJCQluZXcgSGVybygi5paO6JekIiwgMjApCgkJKTsKCgkJT3B0aW9uYWw8SGVybz4gaG9wdCA9IGhlcm9lcy5zdHJlYW0oKS5tYXgoKHgseSktPnguaHAteS5ocCk7CgoJCWlmKGhvcHQuaXNQcmVzZW50KCkpIHsKCQkJU3lzdGVtLm91dC5wcmludGxuKCLmnIDlpKdIUOOBruWLh+iAheOBryIgKyBob3B0LmdldCgpLm5hbWUpOwoJCX0KCX0KfQoKLy8KLy8g44G744KT44Go44Gv44GN44Gj44GoIGphdmEudXRpbC5MaXN0PEhlcm8+Ci8vCmNsYXNzIFNhbXBsZUhlcm9lcyB7CgoJcHJpdmF0ZSBmaW5hbCBIZXJvW10gaGVyb2VzOwoKCXB1YmxpYyBTYW1wbGVIZXJvZXMoSGVyby4uLiBoZXJvZXMpIHsKCgkJdGhpcy5oZXJvZXMgPSBoZXJvZXM7Cgl9CgoJLy8KCS8vIGhlcm9lcy5zdHJlYW0oKQoJLy8KCVNhbXBsZVN0cmVhbSBzdHJlYW0oKSB7CgoJCXJldHVybiBuZXcgU2FtcGxlU3RyZWFtKGhlcm9lcyk7Cgl9Cn0KCi8vCi8vIOOBu+OCk+OBqOOBr+OBjeOBo+OBqCBqYXZhLnV0aWwuc3RyZWFtLlN0cmVhbTxIZXJvPgovLwpjbGFzcyBTYW1wbGVTdHJlYW0gewoKCXByaXZhdGUgZmluYWwgSGVyb1tdIGhlcm9lczsKCglTYW1wbGVTdHJlYW0oSGVyb1tdIGhlcm9lcykgewoKCQl0aGlzLmhlcm9lcyA9IGhlcm9lczsKCX0KCgkvLwoJLy8gaGVyb2VzLnN0cmVhbSgpLm1heCgpCgkvLwoJcHVibGljIE9wdGlvbmFsPEhlcm8+IG1heChDb21wYXJhdG9yPEhlcm8+IGNvbXApIHsKCgkJSGVybyBtYXggPSBoZXJvZXNbMF07CgoJCWZvciAoaW50IGkgPSAxOyBpIDwgaGVyb2VzLmxlbmd0aDsgaSArKykgewoKCQkJLy8gKHgseSkgLT4geC5ocCAtIHkuaHAg44Gn5aSn5bCP5q+U6LyDCgkJCWlmIChjb21wLmNvbXBhcmUoaGVyb2VzW2ldLCBtYXgpID4gMCkgewoJCQkJbWF4ID0gaGVyb2VzW2ldOwoJCQl9CgkJfQoKCQlyZXR1cm4gT3B0aW9uYWwub2YobWF4KTsKCX0KfQoKY2xhc3MgSGVybyB7CgoJZmluYWwgU3RyaW5nIG5hbWU7CglmaW5hbCBpbnQgaHA7CgoJSGVybyhTdHJpbmcgbmFtZSwgaW50IGhwKSB7CgoJCXRoaXMubmFtZSA9IG5hbWU7CgkJdGhpcy5ocCAgID0gaHA7Cgl9Cn0K