Один и тот же код. Посоветуйте, пожалуйста, как и в какой метод обернуть?

Помогите, пожалуйста, подобрать метод, весь код здесь:

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() и реализует ту же логику.

→ Ссылка