Я работаю над проектом, использующим java 8, этот проект предназначен для получения некоторой географической информации и работы с этим. я уже сделал часть этой работы в Python, и теперь я перевожу эта часть сделала в Python для Java 8, а в Python Я использую эти строки ниже для преобразования координат в формате Google в формат PostGIS:Преобразование Python в Java 8
s1 = tuple(value.split(" "))
s2 = zip(s1[1::2], s1[::2])
Например:
у меня есть вход как: значение = "+11,1234567912,98765511,343445412,1223323" и так далее Питон выше код изменяет де вход: s2 = «12,98765511,1234567912,1223323» и так далее.
Изменение положения каждой пары координат, каждый вход имеет тысячи координат. Чтобы получить тот же эффект с Java (до Java 8): Используя свои знания Java (приобретенный до Java 8) мне нужно будет сделать:
try {
String result = "", right = "", left = "";
String[] txt = str.split(" ");
for (int i = 0; i < txt.length; i += 2) {
right = txt[i];
left = txt[i + 1];
result += "," + left + " " + right;
}
return result.substring(1);
} catch (ArrayIndexOutOfBoundsException e) {
return null;
}
выполнит код Java выше тысяч раз , мой вопрос: Java 8 имеет новый способ сделать этот код выше, чем Python?
Моя мотивация задать этот вопрос, потому что я наткнулся на эту новость о Java 8:
List<String> someList = new ArrayList<>();
// Add some elements
someList.add("Generic (1.5)");
someList.add("Functional (8)");
// Open a stream
someList.stream()
// Turn all texts in Upper Case
.map(String::toUpperCase)
// Loop all elemnst in Upper Case
.forEach(System.out::println);
Обновление:
Решение Жан-Франсуа Савар был совершенным с использованием Java 8, как Я спросил, спасибо так много Жана-Франсуа Савара
String str = "11.12345679 12.987655 11.3434454 12.1223323 11.12345679 12.987655 11.3434454 12.1223323";
String[] strs = str.split(" ");
str = IntStream.range(0, strs.length) .filter(i -> i % 2 == 0) .mapToObj(i -> strs[i + 1] + " " + strs[i]) .collect(Collectors.joining(","));
System.out.println(str);
>> 12.987655 11.12345679,12.1223323 11.3434454,12.987655 11.12345679,12.1223323 11.3434454
решения показано вампиром и Tukayi подходит perfectl y в моей проблеме, большое спасибо ребятам
String str = "11.12345679 12.987655 11.3434454 12.1223323 11.12345679
12.987655 11.3434454 12.1223323";
str = str.replaceAll("([^\\s]+) ([^\\s]+)(?: |$)", ",$2 $1").substring(1);
System.out.println(str);
Может, было бы проще, чтобы показать пример ввода и вывода; кроме того, показывая код и рассказывая нам: вот что должно произойти. И подсказка: игнорирование массива вне границ; и просто возврат null выглядит как ошибка. Вы знаете, ваша обработка идет не так (потому что вы делаете что-то неправильно или неожиданно вводите) ... и вы просто игнорируете это ?! – GhostCat
Является ли 'return = result.substring (1);' собирается компилироваться? –
Есть ли шанс, что вы могли бы использовать [jython] (http://www.jython.org/)? Это, безусловно, самый быстрый вариант - никакого преобразования не требуется. – miraculixx