Не, не проверял, не было возможности. Просто дописал сортировку по памяти из переговорки во время митинга. Чтоб сортировка заработала корректно нужно поменять parallelStream() на stream().
В параллельных стримах сортировка имеет смысл только (вроде) перед вызовом коллектора. Я думал, что это очевидно, поэтому и не стал весь класс еще раз выкладывать.
Для работы нужны такие зависимости:
Code: Select all
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.1</version>
</dependency>
</dependencies>
Code: Select all
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
import java.io.IOException;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Stream;
public class Application {
public static void main(String[] args) {
getStreamFromFile("coordinates.json")
.sorted(Comparator.comparingDouble(a -> a.distanceTo(6, 31)))
.map(r -> "pivot: " + r.id + ", distance: " + r.distanceTo(6,31))
.forEach(System.out::println);
}
private static Stream<Record> getStreamFromFile(String filename) {
try {
return new ObjectMapper()
.readValue(new File(filename), new TypeReference<List<Map<String, String>>>() {
})
.stream()
.map(m -> new Record(m.get("id"), m.get("value")));
} catch (IOException e) {
e.printStackTrace();
return Stream.empty();
}
}
}
Code: Select all
pivot: a, distance: 18.681541692269406
pivot: d, distance: 20.518284528683193
pivot: z, distance: 26.076809620810597
pivot: t, distance: 29.732137494637012
pivot: o, distance: 30.265491900843113
...
Там же функтор можно поставить. Вот я и поставил.brrdrr wrote: 28 Nov 2019 20:46 Что ты в этом выражении «r -> r.distanceTo(6, 31)» с чем сравниваешь?
Чтобы сортировать запись в классе по производимому результату, нужно какой-то носитель создать! Если мы стрим трансформируем в результат, то потеряем «id», так что опять нужно создавать map для «id» и «distanceTo», и вот тогда можно сортировать.
З.Ы. Если совсем ничего не компилируется и не запускается, то я могу просто репозиторий выложить куда-нибудь.