むずむずしたJavaコード
むずむずしたJavaコード
普段Javaをつかった開発に従事させていただいてますが、
読む機会のあったコードの中で、おこがましいですが
「ううう、こう書いてもいいのでは」とむずむずすることがありました。
今回はそういったむずっとくるコードを改善するコードを記載できればと思います。
foreach
class Member {
private String name;
private int age;
// ...AllConfigConstructor,getter,setter
}
List<Member> members = List.of(
new Member("Tom", 21)
, new Member("Gomez", 19)
, new Member("Ame", 10));
Map<String, Member> teens = new HashMap<>();
members.stream().forEach(member -> {
if (member.getAge() < 20 && member.getAge() > 9) {
teens.put(member.getName(), member);
}
});
foreachで条件合致するオブジェクトはmapに詰めるといった記述をみました。
streamのなにをしたいかが読める感じが好きなのに、
foreach内でいろいろやられると命令的に読む内容が増える。ううう。(例は簡単ですが)
filterとCollectorsつかって書き直すならこんな感じかと。
Map<String, Member> teens = members.stream()
.filter(member -> member.getAge() < 20 && member.getAge() > 9)
.collect(Collectors.toMap(Member::getName , Function.identity()));
条件分岐は別で考えたい。filterで中身を整えたあとにmapに変換したい。
newの初期化も消える。
Optional.isPresent()
ラップオブジェクトでNullPointerException回避のためにも
よくつかっているのですが、isPresentとかifPresentとか使い分けがなかなか難しい。
ううう。
Optional<Member> opMember = Optional.ofNullable(member).filter(m -> m.getAge() > 50);
if (opMember.isPresent()) {
execute(opMember.get().getAge());
}
とか
Optional<Member> opMember = Optional.ofNullable(member).filter(m -> m.getAge() > 50);
String target;
if (opMember.isPresent()) {
target = opMember.getName();
} else {
target = null;
}
// ...
Optional.isPresent()で判定して、値があるならなにかしらの
処理をする、もしくは値を取り出す記述を見ました。
Optionalはもっと便利につかえるはず。
Optional.ofNullable(member)
.filter(m -> m.getAge() > 50)
.ifPresent(m -> execute(m.getAge()));
戻りがないならifPresentにConsumerとして渡してあげられるし
String seniorMemberName
= Optional.ofNullable(member)
.filter(m -> m.getAge() > 50)
.map(Member::getName)
.orElse(null);
Optionalもmapメソッドをもってて
空っぽであれば空のOptionalを返してくれるので便利。
if文をかかなくていいし。
ちょっとした使い方覚えるとif文とか書かなくてよくなるので
やっぱりJavadoc見たりした方がいいですね。
小さな現場からは以上です。
※上記の改善側にもむずむずする方もいらっしゃるとは思います。
その時はご指摘いただけると幸いです。
題材が少なすぎてどうにもならんかもですが。
Author And Source
この問題について(むずむずしたJavaコード), 我々は、より多くの情報をここで見つけました https://qiita.com/su-guru/items/9ec9d00de653829f8751著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .