Java 8 的 Stream API是對集合(Collection)功能的增強,能進行各種便利、高效的聚合操作(aggregate operation),或者數據操作。

同時提供順序流和並行流兩模式進行匯聚操作:

  • 並行模式:把一個內容分成多個數據塊,並用不同的線程分別處理每個數據塊的流(Fork/Join),能夠充分利用多核處理器的優勢。使用 fork/join 並行方式拆分任務和加速處理過程。
  • 順序模式:一個一個執行
  • 順序流的操作是在單線程上執行,而並行流的操作是在多線程上併發。
  • 並不是所有的問題都適合使用並行模式,考量要點:數據量、任務是否獨立、資料是否有順序
  • stream() − 為集合創建串行流;parallelStream() − 為集合創建並行流。

 Stream建構方法 

//基本數值型,目前有三種對應的包裝類型 Stream:IntStream、LongStream、DoubleStream ,可以直接套用增加效能

//Individual values
Stream stream = Stream.of("a", "b", "c");

// 2. Arrays
String [] strArray = new String[] {"a", "b", "c"};
Stream streamA = Stream.of(strArray);
Stream streamB = Arrays.stream(strArray);

IntStream.of(new int[]{1, 2, 3});
IntStream.range(1, 3);
IntStream.rangeClosed(1, 3);

// 3. Collections
List<String> list = Arrays.asList(strArray);
Stream stream = list.stream();

 Stream API操作類型 

  • intermediate operation( 中介操作 ):map (mapToInt, flatMap 等)、 filter、 distinct、 sorted、 peek、 limit、 skip、 parallel、 sequential、 unordered。
    一個Stream後面可以跟隨0或多個操作,尚未真正開始Stream的遍歷,多個操作在 Terminal 操作的時候一次循環完成
  • terminal operations( 聚合操作 ):forEach、 forEachOrdered、 toArray、 reduce、 collect、 min、 max、 count、 anyMatch、 allMatch、 noneMatch、 findFirst、 findAny、 iterator,真正開始Stream的遍歷
  • Short-circuiting: anyMatch、 allMatch、 noneMatch、 findFirst、 findAny、 limit

 filter:過濾,符合條件的留下 

List<String> strList = Arrays.asList("A", "B", "AA", "C");
List<String> strListAfter = strList.stream()
 .filter(x -> x.contains("A"))
 .collect(Collectors.toList());

 map:把 input Stream 的每一個元素,映射成 output Stream 的另外一個元素 

文章標籤

咪卡恰比 發表在 痞客邦 留言(0) 人氣()

ftp client和ftp server進行文件上傳會建立2條連接(control connectionsdata connections )

control connections : client 對server所下的任何指令 ( tcp/21 )

data connections:資料傳輸 (tcp/20)

client-server連線後保持著control connections等待要求,當需要傳輸檔案時,建立data connections,資料傳送完畢後釋放

控制連接:ftp命令交互

import org.apache.commons.net.ftp.FTPClient;

    FTPClient client = new FTPClient();
    /**
     * client和server的連線逾時時間
     */
    client.setConnectTimeout(connectTimeout);
    /**
     * 非處理資料總時間,data connections中socket阻塞未收到檔案的時間
     */
    client.setDataTimeout(timeout);
    /**
     * control connections數據讀取超時的時間
     * SoTimeout def.-set before connect() 
     */
    client.setDefaultTimeout(timeout);
    /**
     * control connections建立後,重新設置數據讀取超時時間
     * -set after connect() 
     */
    client.setSoTimeout(timeout);

 

文章標籤

咪卡恰比 發表在 痞客邦 留言(0) 人氣()

String array change to IntegerList

String[] arr = {'1', '2', '3'}
List<Integer> numList = Arrays.stream(arr )
            .map(Integer::parseInt)
            .collect(Collectors.toList());

文章標籤

咪卡恰比 發表在 痞客邦 留言(0) 人氣()

避免溢位計算

java.lang.Math;

Math.addExact(Long.MAX_VALUE-1L, 2L); //計算溢位

throw java.lang.ArithmeticException: long overflow




文章標籤

咪卡恰比 發表在 痞客邦 留言(0) 人氣()

error by

Servlet.service() for servlet [dispatcherServlet] in context with path [/testweb] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateInputException: Error resolving template [/mem/prof/view], template might not exist or might not be accessible by any of the configured Template Resolvers] with root cause
org.thymeleaf.exceptions.TemplateInputException: Error resolving template [/mem/prof/view], template might not exist or might not be accessible by any of the configured Template Resolvers
    at org.thymeleaf.engine.TemplateManager.resolveTemplate(TemplateManager.java:869)
    at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:607)
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1098)
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1072)

文章標籤

咪卡恰比 發表在 痞客邦 留言(0) 人氣()

java.time.LocalDateTime to java.util.Date

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;

import org.junit.Test;

public class LocalDateTimeTest {
        
        @Test   
        public void toDate(){

          LocalDateTime testLDT = LocalDateTime.now();
          Date testD = Date.from(testLDT.atZone(ZoneId.systemDefault()).toInstant());
          
          System.out.println(testD.toString());

          LocalDateTime testLDT2 = LocalDateTime.ofInstant(testD.toInstant(), ZoneId.systemDefault());
          System.out.println(testLDT2.toString());
        }

}

文章標籤

咪卡恰比 發表在 痞客邦 留言(0) 人氣()

國內旅行繼續進行中,以下是個人整理完,值得參考住宿的飯店方案
主要考慮目標飯店是下殺額度比較高、一般比較不會有機會住的飯店。

image

 福華飯店 

  1. 「萬聖節搗蛋趣專案
    https://www.howard-hotels.com.tw/zh_TW/Promo/506

訂房日期:~2021/10/16
入住日期:2021/10/18~2021/10/31

文章標籤

咪卡恰比 發表在 痞客邦 留言(0) 人氣()