Stream 應用

開發應用日誌

Object list stream cast class

public static void main(String[] args) throws JsonProcessingException, ParseException {	
	List<Object> list = new ArrayList<>();
	for(long i = 0; i < 100; i++){
		list.add(new ViewCounts().setMemberId(i));
	}

	calculateProcess("has Filter >", () -> {
		list.stream()
		.filter(ViewCounts.class::isInstance)
		.map(ViewCounts.class::cast)
		.forEach(o -> System.out.println("2 > memberId:" + o.getMemberId()));
	});
	// has Filter > duration: 19(ms)

	calculateProcess("no Filter >", () -> {
		list.stream()
		.map(o -> (ViewCounts) o)
		.forEach(o -> System.out.println("memberId:" + o.getMemberId()));
	});
	// no Filter > duration: 17(ms)
}

interface calculateProcess {
	void calculate();
}

public static void calculateProcess(String methodName, calculateProcess process) {
	long start = System.nanoTime();
	if (Objects.nonNull(process))
		process.calculate();
	long end = System.nanoTime();
	long duration = TimeUnit.NANOSECONDS.toMillis(end - start);
	System.out.println(methodName + " duration: " + duration + "(ms)");
}

兩種方法經過效能測試幾乎一樣,但第一種寫法比較穩健,可以避免ClassCastException的問題發生。

Summing Numbers - 統計數值

LongStream - 簡易迴圈操作

如果我有看到很棒的寫法,會持續更新....

Last updated