Изменить код, используя циклы из 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);
}
}