Умным способом решения вашей проблемы было бы использование Java Streams:
final String[] courseDesc = {"Computer Science", "Engineering", "Dentistry", "Architecture", "Computer Science", "Dentistry"};
final int[] courseCount = {15, 20, 10, 11, 25, 7};
Map<String, Integer> summaryReport = IntStream.range(0, courseDesc.length).boxed()
.collect(Collectors.toMap(
index -> courseDesc[index], index -> courseCount[index],
(count0, count1) -> count0 + count1, LinkedHashMap::new
));
Это создает карту с курсом в качестве ключа и суммой в качестве значения. Если карта содержит курс и этот же курс собирается снова, лямбда-выражение (count0, count1) -> count0 + count1
обрабатывает его путем суммирования значений. LinkedHashMap::new
должен поддерживать порядок.
Теперь вы можете распечатать резюме следующим образом:
summaryReport.forEach((course, count) -> System.out.println(course + " - " + count));
Результат:
Computer Science - 40
Engineering - 20
Dentistry - 17
Architecture - 11
Вопрос немного запутанный, но я постараюсь помочь. По сути, если порт (50007) заблокирован на сервере с помощью брандмауэра, вы НЕ сможете установить TCP-соединение с ним с клиента. Это цель брандмауэра. Многие протоколы (например, SIP и bittorrent) используют стратегии навигации брандмауэра и NAT, но это сложная тема, которую вы можете получить более подробную информацию здесь . Вы заметите, что для эффективного использования bittorrent необходимо включить переадресацию портов для NAT и разблокировать диапазоны портов для брандмауэров. Также, bittorrent использует TCP-соединения для большей части передачи данных. Вывод:
Во-первых, обратите внимание, что программа BitTorrent должна устанавливать два типа соединений:
- Исходящие HTTP-соединения с трекером, обычно через порт 6969.
- Входящие и исходящие соединения с партнером машины, обычно с портом 6881 и выше.
Очень сложно понять твой вопрос ...
(...) Torrent-клиенты делают это как-то.
Torrent-клиенты могут делать это только тогда, когда маршрутизатор - устройство интернет-шлюза (IGD) - поддерживает протокол uPNP . Интересной частью вашей проблемы является раздел о прохождении NAT .