а какие современные языки проще читаются?8K wrote: 27 Nov 2019 23:20
Ну, как же из другой, когда из той же самой. Джависты любят обложиться интерфейсами и конкретными имплементациями, завести factory, controller, manager, что там еще бывает? Я через их код с большим трудом продираюсь. Может, конечно, нехватка опыта сказывается. Они-то, небось, всего этого и не замечают, на автомате делают.
Найти ответы in Java
-
- Уже с Приветом
- Posts: 64875
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
Re: Найти ответы in Java
-
- Уже с Приветом
- Posts: 5552
- Joined: 20 Mar 2001 10:01
- Location: SFBA
Re: Найти ответы in Java
Ну, это не столько от языка зависит, сколько от конкретного человека. Мой фортран был без особых излишеств и вполне себе структурированный и понятный. Соответственно, в отличие от других сотрудников, мне не приходилось тратить кучу времени на отладку.
А с джавой сами понимаете, кто там в первую очередь присутствует.
Увидев друга, Портос вскрикнул от радости...
-
- Уже с Приветом
- Posts: 64875
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
-
- Уже с Приветом
- Posts: 5552
- Joined: 20 Mar 2001 10:01
- Location: SFBA
Re: Найти ответы in Java
Я сам не так чтобы много языков знаю. Основная проблема во всем этом программировании, что мы не умеем аккуратно описывать динамические процессы и их взаимодействие. Статическая программа (ну, те самые распечатки с АЦПУ) волшебным образом моделирует меняющийся мир.
Возможно, Go немного дальше продвинулся в этом смысле. Ну, типа expressive power.
Возможно, Go немного дальше продвинулся в этом смысле. Ну, типа expressive power.
Увидев друга, Портос вскрикнул от радости...
-
- Уже с Приветом
- Posts: 143
- Joined: 29 Apr 2014 12:22
Re: Найти ответы in Java
Приобщение к прекрасному миру джабы "студента". Как бы на примере, brrdrr показывает, что погромирование не только гугление и копипаст, но и нечто большее. Что то типа "добро пожаловать" в сей прекрасный мир. Деньги, тачки, яхты, выкупленный домик в долине, всё это будет, главное удачно жениться, а пока - добро пожаловать в мир ректального программирования.
-
- Уже с Приветом
- Posts: 64875
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
-
- Уже с Приветом
- Posts: 549
- Joined: 07 Jan 2016 13:04
Re: Найти ответы in Java
Можно еще так (после жабы №8). Тут 2 класса. На сортировку я забил.
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.List;
import java.util.Map;
import java.util.stream.Stream;
public class Application {
public static void main(String[] args) {
getStreamFromFile("coordinates.json")
.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>>>() {
})
.parallelStream()
.map(m -> new Record(m.get("id"), m.get("value")));
} catch (IOException e) {
e.printStackTrace();
return Stream.empty();
}
}
}
Code: Select all
public class Record {
final String id;
final double x, y;
Record(String id, String value) {
this.id = id;
String[] coordinates = value.split(",");
this.x = Double.parseDouble(coordinates[0]);
this.y = Double.parseDouble(coordinates[1]);
}
double distanceTo(double x, double y) {
return Math.hypot(this.x - x, this.y - y);
}
}
-
- Уже с Приветом
- Posts: 64875
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
Re: Найти ответы in Java
Плюс за знание библиотек, но с учетом того, что у brrdrr были комментарии и дебаггинг распечатки в коде, у вас ненамного короче получилось, ну и на сортировку вы забили.
-
- Уже с Приветом
- Posts: 549
- Joined: 07 Jan 2016 13:04
Re: Найти ответы in Java
С сортировкой код будет на одну строчку длиннее:Komissar wrote: 28 Nov 2019 13:50 Плюс за знание библиотек, но с учетом того, что у brrdrr были комментарии и дебаггинг распечатки в коде, у вас ненамного короче получилось, ну и на сортировку вы забили.
Code: Select all
public static void main(String[] args) {
getStreamFromFile("coordinates.json")
.sorted(Comparator.comparingDouble(r -> r.distanceTo(6, 31))) // <---------------- Тута
.map(r -> "pivot: " + r.id + ", distance: " + r.distanceTo(6,31))
.forEach(System.out::println);
}
-
- Уже с Приветом
- Posts: 64875
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
Re: Найти ответы in Java
Я к тому, что код brrdrr не намного длиннее вашего, если убрать комментарии. После рассказов о невероятной технической крутости вас и вашей команды я, честно, ожидал большего.
-
- Уже с Приветом
- Posts: 549
- Joined: 07 Jan 2016 13:04
Re: Найти ответы in Java
Вы мне льстите. Я инженер, а не волшебник. ))
У brrdrr метод print делает тоже самоей, что и мой main, но я более экономно отношусь к ресурсам. Я просто очень рачительный инженер. ))
И я могу ошибаться, но читаемость у моего кода должна быть повыше.
У brrdrr метод print делает тоже самоей, что и мой main, но я более экономно отношусь к ресурсам. Я просто очень рачительный инженер. ))
Code: Select all
public static void print(Map<String, Double> map) {
Map<String, Double> sortedMap = map
.entrySet()
.stream()
.sorted(Comparator.comparing(
Map.Entry<String, Double>::getValue).thenComparing(
Map.Entry<String, Double>::getKey))
.collect(
Collectors.toMap(Map.Entry::getKey,
Map.Entry::getValue, (oldV, newV) -> oldV,
LinkedHashMap::new));
DecimalFormat df = new DecimalFormat("0.00");
System.out.println("This is the distance from Origin Point");
sortedMap.forEach((k, v) -> System.out.println("ID: " + k
+ " Distance: " + df.format(v)));
}
-
- Уже с Приветом
- Posts: 143
- Joined: 29 Apr 2014 12:22
Re: Найти ответы in Java
.hypot тут зло.tessob wrote: 28 Nov 2019 11:32 Можно еще так (после жабы №8). Тут 2 класса. На сортировку я забил.
Code: Select all
double distanceTo(double x, double y) { return Math.hypot(this.x - x, this.y - y); }
![Mentor :umnik1:](./images/smilies/umnik.gif)
![Crazy :crazy:](./images/smilies/crazy.gif)
![we are friends :fr:](./images/smilies/druzja.gif)
![Drinks or Beer :beer:](./images/smilies/drinks.gif)
-
- Уже с Приветом
- Posts: 64875
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
Re: Найти ответы in Java
Насчёт читаемости вы обольщаетесь. Скажу вам из опыта начальника над программистами. Скажем, что-то в программе сбоит и подозрение на ваш кусок кода. Я вызываю свежего выпускника, говорю рррразберись. Так в вашем коде он будет 100 лет ковыряться, а код brrdrr прочтёт с листа. Там немного больше строк, но зато каждая прозрачна, как слеза младенца.tessob wrote: 28 Nov 2019 14:28 Вы мне льстите. Я инженер, а не волшебник. ))
У brrdrr метод print делает тоже самоей, что и мой main, но я более экономно отношусь к ресурсам. Я просто очень рачительный инженер. ))
И я могу ошибаться, но читаемость у моего кода должна быть повыше.Code: Select all
public static void print(Map<String, Double> map) { Map<String, Double> sortedMap = map .entrySet() .stream() .sorted(Comparator.comparing( Map.Entry<String, Double>::getValue).thenComparing( Map.Entry<String, Double>::getKey)) .collect( Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldV, newV) -> oldV, LinkedHashMap::new)); DecimalFormat df = new DecimalFormat("0.00"); System.out.println("This is the distance from Origin Point"); sortedMap.forEach((k, v) -> System.out.println("ID: " + k + " Distance: " + df.format(v))); }
-
- Уже с Приветом
- Posts: 9563
- Joined: 26 Mar 2011 23:02
- Location: Russia -> Orlando, FL
Re: Найти ответы in Java
Умный да?tessob wrote: 28 Nov 2019 14:05 С сортировкой код будет на одну строчку длиннее:
Code: Select all
public static void main(String[] args) { getStreamFromFile("coordinates.json") .sorted(Comparator.comparingDouble(r -> r.distanceTo(6, 31))) // <---------------- Тута .map(r -> "pivot: " + r.id + ", distance: " + r.distanceTo(6,31)) .forEach(System.out::println); }
![Smile :-)](./images/smilies/smile.gif)
Ты хоть свои коды через Eclipse пропускаешь?
1. Не работает твоя сортировка от слова совсем.
Что ты в этом выражении «r -> r.distanceTo(6, 31)» с чем сравниваешь?
Чтобы сортировать запись в классе по производимому результату, нужно какой-то носитель создать! Если мы стрим трансформируем в результат, то потеряем «id», так что опять нужно создавать map для «id» и «distanceTo», и вот тогда можно сортировать.
2. У меня без кастов запустить твой код не получилось.
(Collection<Map<String, String>>) new ObjectMapper()
((Map<String, String>) m).get("id"), ((Map<String, String>) m).get("value"))
Даже интересно, как у тебя оно работало?
В общем учись пока дядя Brrdrr дышит.
Вот рабочий вариант:
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.Collection;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Application {
public static void main(String[] args) {
getStreamFromFile("C:\\coordinates.json")
.collect(Collectors.toMap(r -> r.id, r -> r.distanceTo(6, 31)))
.entrySet()
.stream()
.sorted(Comparator.comparing(
Map.Entry<String, Double>::getValue).thenComparing(
Map.Entry<String, Double>::getKey))
.collect(
Collectors.toMap(Map.Entry::getKey,
Map.Entry::getValue, (oldV, newV) -> oldV,
LinkedHashMap::new))
.forEach(
(k, v) -> System.out.println("pivot: " + k
+ ", distance: " + v));
}
private static Stream<Record> getStreamFromFile(String filename) {
try {
return ((Collection<Map<String, String>>) new ObjectMapper()
.readValue(new File(filename),
new TypeReference<List<Map<String, String>>>() {
})).parallelStream().map(
m -> new Record(((Map<String, String>) m).get("id"),
((Map<String, String>) m).get("value")));
} catch (IOException e) {
e.printStackTrace();
return Stream.empty();
}
}
}
Человек никогда не бывает так несчастен, как ему кажется, или так счастлив, как ему хочется. (Франсуа де Ларошфуко)
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: Найти ответы in Java
Питон, например (как бонус - работает для координат любой размерности, не только 2D):Komissar wrote: 27 Nov 2019 23:59а какие современные языки проще читаются?8K wrote: 27 Nov 2019 23:20
Ну, как же из другой, когда из той же самой. Джависты любят обложиться интерфейсами и конкретными имплементациями, завести factory, controller, manager, что там еще бывает? Я через их код с большим трудом продираюсь. Может, конечно, нехватка опыта сказывается. Они-то, небось, всего этого и не замечают, на автомате делают.
Code: Select all
import json
def print_closest(filename, origin):
def dist_squared(pt):
coords = [float(s) for s in pt['value'].split(',')]
assert len(coords) == len(origin)
return sum((c - o) * (c - o) for c, o in zip(coords, origin))
print(sorted(json.load(open(filename)), key=dist_squared))
print_closest('coordinates.json', (6, 33))
Мир Украине. Свободу России.