Один и тот же код. Посоветуйте, пожалуйста, как и в какой метод обернуть?
Помогите, пожалуйста, подобрать метод, весь код здесь:
Thread.sleep(100);
Thread letterA = new Thread(() -> {
int amount = 0;
int tempAmount;
for (int i = 0; i < stringAmount; i++) {
try {
String tempString = blockingQueue1.take();
tempAmount = symbolCounting('a', tempString);
if (tempAmount > amount) {
stringMaxA.setMaxAmount(tempAmount);
stringMaxA.setText(tempString);
amount = tempAmount;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}// for
});
Thread letterB = new Thread(() -> {
int amount = 0;
int tempAmount;
for (int i = 0; i < stringAmount; i++) {
try {
String tempString = blockingQueue2.take();
tempAmount = symbolCounting('b', tempString);
if (tempAmount > amount) {
stringMaxB.setMaxAmount(tempAmount);
stringMaxB.setText(tempString);
amount = tempAmount;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}// for
});
Thread letterC = new Thread(() -> {
int amount = 0;
int tempAmount;
for (int i = 0; i < stringAmount; i++) {
try {
String tempString = blockingQueue3.take();
tempAmount = symbolCounting('c', tempString);
if (tempAmount > amount) {
stringMaxC.setMaxAmount(tempAmount);
stringMaxC.setText(tempString);
amount = tempAmount;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}// for
Ответы (1 шт):
Автор решения: Serodv
→ Ссылка
private Thread foo(int stringAmount, BlockingQueue<String> blockingQueue, MyString stringMax, char c) {
return new Thread(() -> {
int amount = 0;
int tempAmount;
for (int i = 0; i < stringAmount; i++) {
try {
String tempString = blockingQueue.take();
tempAmount = symbolCounting(c, tempString);
if (tempAmount > amount) {
stringMax.setMaxAmount(tempAmount);
stringMax.setText(tempString);
amount = tempAmount;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
...
Thread letterA = foo(stringAmount, blockingQueue1, stringMaxA, 'a');
Thread letterB = foo(stringAmount, blockingQueue2, stringMaxB, 'b');
Thread letterC = foo(stringAmount, blockingQueue3, stringMaxC, 'c');
ну и второй, более предпочтительный вариант - создать класс имплементирующий Runnable, который принимает через конструктор те же параметры что и метод foo() и реализует ту же логику.