##Map
ListとMapといえば有名なアレですけども
ListならできるのにMapのkeySetならできないみたいなこと、実は結構おおくて不便に感じません?
そんなときにEntrySetです
keySetより処理早いらしいので何もなくてもおぬぬめ
##やってみよう
EntrySet.java
package entrySet;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.function.UnaryOperator;
import java.util.stream.Collectors;
/**
* To practice Map
*
* @author me
*
*/
public class practiceMap {
/**
* main
*
* @param args
*/
public static void main(String[] args) {
run();
}
/**
* run
* @throws NumberFormatException if conversion to numeric number is impossible.
*/
private static void run() throws NumberFormatException {
int sum = generate.get().entrySet().stream().filter(Objects::nonNull).map(avoidNullSum)
.collect(Collectors.summingInt(Integer::intValue));
echo.accept(sum);
}
/** Generate Map */
static Supplier<Map<Integer, String>> generate = () -> {
Map<Integer, String> map = new HashMap<Integer, String>();
map.put(null, null);
map.put(1, "1");
map.put(2, "2");
map.put(3, "3");
map.put(4, "4");
map.put(5, "5");
return map;
};
/** Avoid null and sum */
static Function<Entry<Integer, String>, Integer> avoidNullSum = v -> Optional.ofNullable(v.getKey()).orElse(1)
+ Integer.parseInt(Objects.toString(v.getValue(), "1"));
/** Output */
static Consumer<Object> echo = v -> System.out.println(v);
}
主にここに注目です
.java
/** Avoid null and sum */
static Function<Entry<Integer, String>, Integer> avoidNullSum = v -> Optional.ofNullable(v.getKey()).orElse(1)
+ Integer.parseInt(Objects.toString(v.getValue(), "1"));
null回避してるので見にくいかもしれませんが
EntrySetとは、のSetのことで
繰り返し処理中のみつかえるものです。
ようは
List<Integer, String>
みたいなもんです
<Integer, String>の組み合わせを一つずつあつかうループになるわけですね
こっちのがわかりやすいかもです
Wakaru.java
package entrySet;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.function.Supplier;
public class Wakaru {
public static void main(String[] args) {
for (Entry<Integer, String> model : generate.get().entrySet()) {
model.getKey();
model.getValue();
}
}
/** Generate Map */
static Supplier<Map<Integer, String>> generate = () -> {
Map<Integer, String> map = new HashMap<Integer, String>();
map.put(null, null);
map.put(1, "1");
map.put(2, "2");
map.put(3, "3");
map.put(4, "4");
map.put(5, "5");
return map;
};
}
Optionalもstreamも捨てるとまじで旧時代のコードに見えてくる...w