Изменить код, используя циклы из java 8

Код заменяет цифры на слова. Как это можно изменить, используя циклы из java 8? Я пробовал сам, но ведь в лямбда можно передать только константу.

public class Solution {
        public static Map<Integer, String> map = new HashMap<Integer, String>();
    
        static {
            map.put(0, "ноль");
            map.put(1, "один");
            map.put(2, "два");
            map.put(3, "три");
            map.put(4, "четыре");
            map.put(5, "пять");
            map.put(6, "шесть");
            map.put(7, "семь");
            map.put(8, "восемь");
            map.put(9, "девять");
            map.put(10, "десять");
            map.put(11, "одиннадцать");
            map.put(12, "двенадцать");
        }
    
        public static void main(String[] args) {
    
            try (BufferedReader fileName = new BufferedReader(new InputStreamReader(System.in));
                 BufferedReader fileReader = new BufferedReader(new FileReader(fileName.readLine()))) {
    
                while (fileReader.ready()) {
    
                    String strFFromFile = fileReader.readLine();
    
                    for (Map.Entry<Integer, String> pair : map.entrySet()) {
                        String strKey = "\\b" + pair.getKey() + "\\b";
                        strFFromFile = strFFromFile.replaceAll(strKey, pair.getValue());
                    }
    
                    System.out.println(strFFromFile);
    
                }
    
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    }

Ответы (1 шт):

Автор решения: Alexandr

Как-то так:

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Map;
import java.util.Scanner;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Solution {

    private static final Map<Integer, String> MAP =
            Stream.of(new Object[][]{
                    {0, "ноль"},
                    {1, "один"},
                    {2, "два"},
                    {3, "три"},
                    {4, "четыре"},
                    {5, "пять"},
                    {6, "шесть"},
                    {7, "семь"},
                    {8, "восемь"},
                    {9, "девять"},
                    {10, "десять"},
                    {11, "одиннадцать"},
                    {12, "двенадцать"}
            }).collect(
                    Collectors.toMap(
                            data -> (Integer) data[0],
                            data -> (String) data[1]));

    private static final Function<String, String> FUNCTION =
            MAP.entrySet().stream()
                    .map(e -> (Function<String, String>) s -> s.replaceAll("\\b" + e.getKey() + "\\b", e.getValue()))
                    .reduce(Function.identity(), Function::andThen);
    
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        String path = scanner.next();
        Files.lines(Paths.get(path))
                .map(FUNCTION)
                .forEach(System.out::println);
    }

}
→ Ссылка