国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

利用JDK8的新特性計(jì)算某個(gè)目錄下的文件中包含字符串的次數(shù)

2019-11-11 06:43:38
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
需求:計(jì)算某個(gè)字符串在某個(gè)文件夾中出現(xiàn)的次數(shù)。**這篇文章利用了JDK1.8的新特性Stream流和Lambda表達(dá)式并結(jié)合了線程池的使用。**package com.zkn.fullstacktraining.seventh;import javafx.util.Pair;import java.io.IOException;import java.nio.file.Files;import java.nio.file.Paths;import java.util.List;import java.util.Optional;import java.util.concurrent.*;import java.util.stream.Collectors;/** * Created by zkn on 2017/2/5. */public class SearchStringByThreadPool { public static void main(String[] args) { try { //創(chuàng)建5個(gè)固定線程的線程池 ExecutorService executorService = Executors.newFixedThreadPool(5); List<Future<Pair<String, Integer>>> listFile = //這里是取所傳入目錄的最多四層,如果不知道這個(gè)API的話需要遞歸去做。 Files.walk(Paths.get("D://CUST//workspace//JavaCore//FullStackTraining//src//main//java//com//zkn"), 4) .filter(file -> !Files.isDirectory(file) && file.toString().endsWith("java"))//文件文件夾和不是java的文件 .map(file -> (Callable<Pair<String, Integer>>) () -> {//創(chuàng)建N多個(gè)Callable實(shí)現(xiàn)類 Pair<String, Integer> pair = null;//這里的鍵值對(duì)用pair比用Map更好一些 try { Optional optional = Files.lines(file).map(str -> { int count = 0; int index = str.indexOf("main"); if (index >= 0) { //這里需要循環(huán)計(jì)算,因?yàn)榭赡茉谀骋恍兄袝?huì)出現(xiàn)多次 do { count++; } while ((index = str.indexOf("main", index + 1)) > 0); } return count; }).reduce(Integer::sum);//合并最終的計(jì)算結(jié)果 int count = optional.isPResent() ? (int) optional.get() :0; pair = new Pair<>(file.toString(),count); } catch (IOException e) { e.printStackTrace(); } return pair == null ? new Pair<>("", 0) : pair; }) .map(file -> executorService.submit(file))//提交給線程池進(jìn)行處理 .collect(Collectors.toList()); listFile.stream().map(file -> { Pair<String, Integer> pair = null; try { pair = file.get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } return pair == null ? new Pair<>("", 0) : pair; }) .filter(file -> file.getValue() > 0)//過(guò)濾掉不包含字符串的文件 .sorted((s1, s2) -> Integer.compare(s2.getValue(), s1.getValue()))//從大到小排序 .forEach(file -> System.out.println(String.format("%d次出現(xiàn)在%s文件中", file.getValue(), file.getKey()))); //關(guān)閉線程池 executorService.shutdown(); } catch (Exception e) { e.printStackTrace(); } } public void test() { String str = "mainmainmainmainmain"; }}
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 孟村| 左云县| 周口市| 黄陵县| 龙山县| 新田县| 札达县| 美姑县| 麻阳| 丽江市| 南宫市| 潢川县| 元谋县| 新闻| 镇江市| 五峰| 苗栗市| 静海县| 金平| 宣武区| 绥宁县| 达尔| 凤山县| 开封市| 密山市| 儋州市| 达拉特旗| 邯郸市| 德兴市| 濮阳县| 六枝特区| 新源县| 乌拉特前旗| 泸西县| 嵊州市| 南汇区| 长丰县| 化隆| 深圳市| 来凤县| 梁山县|