LoginSignup
4
2

EntrySetが便利な件

Last updated at Posted at 2019-10-17

##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

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2