"Нить ReadThread должна найти байт, который встречается в файле максимальное число раз, и добавить его в словарь resultMap"
А что если максимальное число повторяется?
Например в одном файле два максимально повторяющийся число а Map в качестве ключа берет только имя файла а ключ не повторяется. Он добавляет только одну.
Я добавил три файла:
C:/rukh.txt
C:/rukh2.txt
C:/rukh3.txt
exit
Вывод:
C:/rukh3.txt: 115
C:/rukh2.txt: 32
C:/rukh.txt: 49
Так должно быт или я неправильно понял задачу ?
package com.javarush.task.task18.task1823;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
/*
Нити и байты
*/
public class Solution {
public static Map<String, Integer> resultMap = new HashMap<String, Integer>();
public static void main(String[] args) throws Exception{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line = "";
while (true){
line = reader.readLine();
if(line.equals("exit")) break;
new ReadThread(line);
}
for(Map.Entry m : resultMap.entrySet()) System.out.println(m.getKey() + ": " + m.getValue());
}
public static class ReadThread extends Thread {
FileInputStream in = null;
private String fileName;
public ReadThread(String fileName) throws IOException {
//implement constructor body
this.fileName = fileName;
this.in = new FileInputStream(fileName);
start();
}
// implement file reading here - реализуйте чтение из файла тут
public void run(){
ArrayList<Integer> list = new ArrayList<>();
ArrayList<Integer> list2 = new ArrayList<>();
while (!this.isInterrupted()){
try {
if (!(in.available() > 0)){
this.interrupt();
}
list.add(in.read());
} catch (IOException e) {
e.printStackTrace();
}
}
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
int count = 0;
for (int x = 0; x < list.size(); x++){
int a = Collections.frequency(list, list.get(x));
if(count < a) count = a;
}
for (int x = 0; x < list.size(); x++){
int a = Collections.frequency(list, list.get(x));
if(count == a){
if(!list2.contains(list.get(x))){
list2.add(list.get(x));
}
}
}
resultMap.put(fileName, Collections.max(list2));
}
}
}
/*
C:/rukh.txt
C:/rukh2.txt
C:/rukh3.txt
exit
*/