有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何将这段大代码转换为Java8Lambda表达式

我是java lambda的新手,我正在努力以lambda的形式编写这段代码,请至少有人能告诉我如何在像这样的大代码中实现这一点吗 或者我应该使用流来让它更容易和thx

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

public class charFile {

public static void main(String args[]) {


    TreeMap<Character, Integer> hashMap = new TreeMap<Character, Integer>();
    File file = new File("new.txt");
    Scanner scanner = null;
    try {
        scanner = new Scanner(file, "utf-8");
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    while (scanner.hasNext()) {
        char[] chars = scanner.nextLine().toLowerCase().toCharArray();
        for (Character c : chars) {
            if (!Character.isLetter(c)) {
                continue;
            } else if (hashMap.containsKey(c)) {
                hashMap.put(c, hashMap.get(c) + 1);
            } else {
                hashMap.put(c, 1);
            }
        }
    }
    for (Map.Entry<Character, Integer> entry : hashMap.entrySet()) {
        System.out.println(entry.getKey() + ": " + entry.getValue());
    }


}

}


共 (1) 个答案

  1. # 1 楼答案

    Files.lines(Paths.get("new.txt"), StandardCharsets.UTF_8)
            .map(String::toLowerCase)
            .flatMapToInt(String::chars)
            .mapToObj(c -> (char)c)
            .filter(Character::isLetter)
            .collect(Collectors.groupingBy(c -> c, TreeMap::new, Collectors.counting()))
            .forEach((k, v) -> System.out.println(k + ": " + v));