Java 8. Чтение файла

На просторах Интернета есть немало примеров этой простой операции.
Например этот

Но этот вариант может выдавать различные результаты для одного и того же файла при разных локалях операционной системы!
Однозначный результат можно добиться только указав Charset:

Для всех операций String<->Byte[] всегда указывайте Charset!

Directory stream с помощью Java 8 lambda

Небольшой пример как оставить 100 самых новых файлов *.txt в папке и удалить все остальные с помощью Java 8 lambda.

Задача коммивояжёра на практике

В процессе подготовки к OCP по Java для закрепления полученных знаний я решил переписать рекурсивную реализацию алгоритма «задачи коммивояжёра» с помощью Java Fork/Join Framework.
Данная реализация использует алгоритм ближайшего соседа.

Информация о точках (городах) хранится в объекте TSPPoint. Первая точка маршрута указывает фиксированное начало.
Перед началом работы просчитывается матрица расстояний:

CostX и CostY — это стоимость пути.

Hапример: макс. скорость движения робота по оси X и Y.

За просчёт варианта маршрута отвечает класс TSPAction. Так как мы не возвращаем результат из рекурсивной функции, то класс TSPAction наследует класс RecursiveAction. Всё что необходимо — это написать функцию TSPAction.compute(), которая и будет отвечать за всю логику перебора и эвристику.

Эвристика алгоритма:

  • функция getNextNearestPoint ищет самую ближайшую точку из списка свободных точек localFreePoints.
  • строки 19-23 специфичны именно для реализации с помощью Fork/Join Framework, т.к. порядок выполнения TSPAction в ForkJoinPool недетерминирован

 Скачать исходный код

А вот как это работает на практике