Total Pageviews

2019/05/14

[Java 8] An example to remove an element from a Map via Lambda

Example
package com.example.demo;

import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.Map;

/**
 * An example to remove an element from a Map via Lambda
 */
@Slf4j
public class MapTest {

    private static Map<Integer, String> mapData = new HashMap<>();

    private void createDummyData() {
        mapData.put(1, "Albert");
        mapData.put(2, "Mandy");
        mapData.put(3, "Eric");
        mapData.put(4, "Eason");
        mapData.put(5, "Mia");
        mapData.put(6, "Leon");
    }

    public void doTest() {
        createDummyData();
        log.debug("mapData = {}", mapData);
    }

    public static void main(String[] args) {
        new MapTest().doTest();

        // remove by key
        mapData.keySet().removeIf(key -> key == 1);
        log.debug("[remove key = 1] mapData = {}", mapData);

        // remove by value
        mapData.values().removeIf(value -> "Eric".equals(value));
        log.debug("[remove value = \"Eric\"] mapData = {}", mapData);
    }

}



Console
/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/bin/java "-javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=49591:/Applications/IntelliJ IDEA.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/lib/tools.jar:/Users/guojunyou/IdeaProjects/demo/target/classes:/Users/guojunyou/.m2/repository/org/springframework/boot/spring-boot-starter-actuator/2.0.6.RELEASE/spring-boot-starter-actuator-2.0.6.RELEASE.jar:/Users/guojunyou/.m2/repository/org/springframework/boot/spring-boot-starter/2.0.6.RELEASE/spring-boot-starter-2.0.6.RELEASE.jar:/Users/guojunyou/.m2/repository/org/springframework/boot/spring-boot-starter-logging/2.0.6.RELEASE/spring-boot-starter-logging-2.0.6.RELEASE.jar:/Users/guojunyou/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar:/Users/guojunyou/.m2/repository/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar:/Users/guojunyou/.m2/repository/org/apache/logging/log4j/log4j-to-slf4j/2.10.0/log4j-to-slf4j-2.10.0.jar:/Users/guojunyou/.m2/repository/org/apache/logging/log4j/log4j-api/2.10.0/log4j-api-2.10.0.jar:/Users/guojunyou/.m2/repository/org/slf4j/jul-to-slf4j/1.7.25/jul-to-slf4j-1.7.25.jar:/Users/guojunyou/.m2/repository/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar:/Users/guojunyou/.m2/repository/org/yaml/snakeyaml/1.19/snakeyaml-1.19.jar:/Users/guojunyou/.m2/repository/org/springframework/boot/spring-boot-actuator-autoconfigure/2.0.6.RELEASE/spring-boot-actuator-autoconfigure-2.0.6.RELEASE.jar:/Users/guojunyou/.m2/repository/org/springframework/boot/spring-boot-actuator/2.0.6.RELEASE/spring-boot-actuator-2.0.6.RELEASE.jar:/Users/guojunyou/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.9.7/jackson-databind-2.9.7.jar:/Users/guojunyou/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar:/Users/guojunyou/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.9.7/jackson-core-2.9.7.jar:/Users/guojunyou/.m2/repository/org/springframework/spring-context/5.0.10.RELEASE/spring-context-5.0.10.RELEASE.jar:/Users/guojunyou/.m2/repository/org/springframework/spring-aop/5.0.10.RELEASE/spring-aop-5.0.10.RELEASE.jar:/Users/guojunyou/.m2/repository/org/springframework/spring-beans/5.0.10.RELEASE/spring-beans-5.0.10.RELEASE.jar:/Users/guojunyou/.m2/repository/org/springframework/spring-expression/5.0.10.RELEASE/spring-expression-5.0.10.RELEASE.jar:/Users/guojunyou/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.7/jackson-datatype-jsr310-2.9.7.jar:/Users/guojunyou/.m2/repository/io/micrometer/micrometer-core/1.0.7/micrometer-core-1.0.7.jar:/Users/guojunyou/.m2/repository/org/hdrhistogram/HdrHistogram/2.1.10/HdrHistogram-2.1.10.jar:/Users/guojunyou/.m2/repository/org/latencyutils/LatencyUtils/2.0.3/LatencyUtils-2.0.3.jar:/Users/guojunyou/.m2/repository/org/springframework/boot/spring-boot-devtools/2.0.6.RELEASE/spring-boot-devtools-2.0.6.RELEASE.jar:/Users/guojunyou/.m2/repository/org/springframework/boot/spring-boot/2.0.6.RELEASE/spring-boot-2.0.6.RELEASE.jar:/Users/guojunyou/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/2.0.6.RELEASE/spring-boot-autoconfigure-2.0.6.RELEASE.jar:/Users/guojunyou/.m2/repository/org/projectlombok/lombok/1.16.22/lombok-1.16.22.jar:/Users/guojunyou/.m2/repository/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar:/Users/guojunyou/.m2/repository/org/springframework/spring-core/5.0.10.RELEASE/spring-core-5.0.10.RELEASE.jar:/Users/guojunyou/.m2/repository/org/springframework/spring-jcl/5.0.10.RELEASE/spring-jcl-5.0.10.RELEASE.jar com.example.demo.MapTest
20:45:22.257 [main] DEBUG com.example.demo.MapTest - mapData = {1=Albert, 2=Mandy, 3=Eric, 4=Eason, 5=Mia, 6=Leon}
20:45:22.327 [main] DEBUG com.example.demo.MapTest - [remove key = 1] mapData = {2=Mandy, 3=Eric, 4=Eason, 5=Mia, 6=Leon}
20:45:22.328 [main] DEBUG com.example.demo.MapTest - [remove value = "Eric"] mapData = {2=Mandy, 4=Eason, 5=Mia, 6=Leon}

Process finished with exit code 0



2019/05/13

[GoogleDoc] Using max function in conditional formatting

Problem
Assume I have a number of row, I would like to highlight the max value. How to do it?


How-To
Steps are:
1. Select the range of data => Format => Conditional formatting...


2. Configure conditional formatting rules


3. Check result


Reference
[1] https://webapps.stackexchange.com/questions/100381/using-max-in-conditional-formatting-only-evaluates-numbers-after-the-cell-regar

2019/05/12

[Microsoft PowerPoint] 如何壓縮投影片中的圖檔

壓縮前 1310 KB


How-To
圖片工具 => 格式 => 壓縮圖片

在壓縮圖片的對話視窗中,選擇 Web(150 ppi),按下[確定]後[存檔]




壓縮後 file size 減少 17%




2019/05/11

[Java] How to get the count of line in file?

Here has a simple example to demonstrate how to get the count of lines in file:

package com.example.demo;

import lombok.experimental.UtilityClass;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

@UtilityClass
public class FileUtils {

    public static Long getLines(String filePath) throws IOException {
        Path path = Paths.get(filePath);
        Long count = Files.lines(path).count();
        return count;
    }

}


2019/05/10

若前期為負數,該如何計算成長率

當沒有負數時,常用的公式如下,但若出現負數時,卻會出現負數的成長率:


網路上有看到的參考公式 (分母加上絕對值),讓成長率轉正:


兩種方式都有一些問題:第一個公式無法正確反映成長的結果;然而,第二個公式出現如此高的成長率,但是無法告訴你,會有如此高的成長率是因為前期是負數的關係。

所以,最好的做法應該是給個備註,說明前期是負數的關係故不予顯示,或是顯示公式二的值,再加上備註說明,會是比較好的說明方式。

2019/05/09

[閱讀筆記] 如何衡量萬事萬物 (1/5)


  1. 決策時所擁有的資訊少於應該有的,會因此提高錯誤的機會。如此一來造成資源錯置,拒絕好的想法,卻採用壞的想法。
  2. 科學管理最初的焦點在於將勞動流程做最適化,現今我們需要的則是將管理決策的衡量最適化。對於常被管理階層忽略的那些事物,正式的衡量方法才剛達到相當於煉金術的水準,我們需要從鍊金術前進到化學和物理學。  
  3. 對於你所談論的東西,你若是能加以量度,並以數字將之表達出來,那麼你對於那樣東西可說是有了某種程度的瞭解;反之,你若是無法加以量度,或是無法以數字將之表達出來,那麼你對那樣東西的所知,則要歸於貧乏之列,或是嚴重不足之列
  4. 本書的目的是要告訴企業組織兩件事
                    4.1.          看起來非常棘手的無形事物,其實是可以衡量的
                    4.2.          可利用符合經濟效益的方式完成衡量
  1. 衡量前,唯一要注意的問題是,此事物是否重要到值得做衡量 (相較於衡量的成本,是否具有高資訊價值)
  2. 本書的目標不再涵蓋物理科學或是經濟學中的每一個領域,尤其是那些已經有衡量方法的領域。在這裡,本書所聚焦的衡量,乃是那些與重大組織性決策相關的,甚至是關鍵性的,而且似乎還沒有明顯且符合實際的衡量答案者
  3. 本書的三大命題 (propositions)
                    7.1.          管理階層在意衡量,因為衡量可以對不確定性的決策提供資訊。
                    7.2.          任何一項決策,都存在許多有待衡量的事物以及衡量方法,但是完全的確定性極少是符合現實的選項。
                    7.3.          因此,管理階層需要有一個方法可以分析、降低決策不確定性的各種選項。
  1. 將衡量是為降低不確定性的最適化問題,將有助於解決問題。衡量乃是要支援決策,而衡量本書就有許多決策要處理。如果需要做的決策具有高度不確定性,而且一旦做錯的後果非常嚴重,那麼降低不確定性的衡量,就具有很高的價值。 
  2. 本書處理的三大課題:
                    9.1.          為什麼沒有一件事物是真正無法衡量的?
                    9.2.          如何設定及定義各種衡量問題?
                    9.3.          如何使用有力且實際的衡量方法來解答問題?
  1. 本書要回答的問題:
                 10.1.          到底真正的問題 / 決策 / 困境是什麼?
                 10.2.          該問題真正要衡量的是什麼,以及準確 / 正確程度要多少?
  1. 知道不確定性的最大來源,將指引出可以降低最多不確定性的衡量。要對那些看似完全無法衡量的事物做衡量,非常重要的一步就是,評估你目前對於這個數值所知道的資訊。
  2. 無形的事物之所以看起來無形,幾乎都不是因為缺乏最複雜的衡量方法,只要我們學會看穿不可衡量的假象。
  3. 真正的衡量不需要完全準確,而是數量上降低不確定性的觀察。只要降低不確定,不必然要消除不確定性,對衡量來說就足夠了
  4. 衡量的觀念、客體與方法  
                 14.1.          觀念:若能了解「衡量」真正的意思,很多事物都會變成可衡量
                 14.2.          客體 (object):對於欲衡量的事物,未能做完善的界定。草率與模擬兩可是做衡量的絆腳石
                 14.3.          方法:許多實證觀察的程序,一般人並不十分了解。若人們能熟悉這些基本的方法,顯然會有許多被認為是無法衡量的事物,不但會是可以衡量,而且早已都被衡量過了
  1. 愛因斯坦曾說過:「數學命題只要是與現實有關的,便不具確定性;而只要它們是確定的,便與現實無關。」
  2. 英國數學家與哲學家說過:「雖然看似相互矛盾,但是所有精確的科學是築基在近似的概念上。如果有人說他精確無誤地了解一件事物,那麼你可以放心地推論,你正和一個不精確的人說話。」
  3. 衡量的定義是,根據一項或多項觀察,以數量表達的方式降低不確定性。就所有實用上的目的而言,科學家將衡量當作是數量上降低不確定性的衡量。只要降低不確定性,不必然要消除不確定性,這對衡量來說就夠了。真正的衡量不需要完全準確。真正的科學做法是報告一個數值區間,例如「玉米農場使用這類新種子,平均收益增加了 10% ~ 18% 之間 ( 95% 信心水準區間)。」沒有誤差的確切數值報告,是由「根據可接受的程序」計算出來的。但是,除非是 100% 完全計算 (ex. 我口袋的零錢),否則一定不是根據實證觀察得來的。
  4. 這種「降低不確定性」的觀點,對企業而言是非常重要的。在不確定的狀況下要做的重大決策 (ex. 是否核可大型 IT 計畫或是新產品開發),都能因為降低不確定性,而做得更好,其所帶來的價值,可能高達數百萬美元。  
  5. 衡量可以用在連續數量上的問題,像是「這項新產品能讓我們的營收增加多少?」,也能用在間斷且定性的問題上,像是「我們的訴訟能贏嗎?」或是「這項研發計畫能成功嗎?」。在商業上,決策者都是在不確定下做決策的。當不確定性涉及大型、風險高的決策,降低不確定性就有很高的價值。  
  6. 把一個問題說明清楚,這個問題就已經解答一半。妨礙知識進步的最大阻力,莫過於模糊不清的用語