- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
String result = "";
for (Object obj : col) {
if (obj instanceof String) {
result += obj + SEPARATOR;
} else {
result += obj.toString() + SEPARATOR;
}
}
if (result.length() >= 2) {
result = result.substring(0, result.length() - SEPARATOR.length());
}
guest 19.06.2012 17:07 # −10
guest 19.06.2012 17:07 # −10
guest 19.06.2012 17:11 # −10
Steve_Brown 19.06.2012 17:15 # +4
3.14159265 19.06.2012 17:26 # −1
bormand 19.06.2012 17:54 # +1
String toString()
This object (which is already a string!) is itself returned.
3.14159265 19.06.2012 17:59 # 0
Lure Of Chaos 20.06.2012 00:34 # +2
Сам давно добавил этот метод в самописные утилиты, пользуюсь до сих пор. и somebody beat me! (всмысле, напишите лучше, чем это)
roman-kashitsyn 20.06.2012 00:47 # +3
Lure Of Chaos 20.06.2012 00:49 # 0
roman-kashitsyn 20.06.2012 01:13 # 0
3.14159265 20.06.2012 14:27 # +2
Я дже джва года джу такой джойнер!
join (map.entrySet(),sep) кроет большинство случаев
roman-kashitsyn 20.06.2012 15:21 # 0
bormand 20.06.2012 15:08 # +4
Lure Of Chaos 20.06.2012 15:44 # +6
bormand 20.06.2012 15:46 # +5
3.14159265 20.06.2012 15:50 # +6
bormand 20.06.2012 15:55 # +7
3.14159265 20.06.2012 16:23 # +6
bormand 20.06.2012 16:55 # +5
3.14159265 20.06.2012 17:15 # +7
bormand 20.06.2012 17:29 # +4
Lure Of Chaos 20.06.2012 22:00 # +2
а потоки не рассинхронизируются?
3.14159265 20.06.2012 16:50 # +7
bormand 20.06.2012 17:01 # +6
roman-kashitsyn 20.06.2012 17:03 # +5
3.14159265 20.06.2012 17:13 # +7
bormand 20.06.2012 17:34 # +3
3.14159265 20.06.2012 17:35 # +4
bormand 20.06.2012 17:45 # +6
3.14159265 20.06.2012 17:53 # +5
3.14159265 20.06.2012 17:56 # +6
Таких как ты, невалидных, я пачками джойнил!!!
3.14159265 20.06.2012 18:02 # +2
батчами
self-fix
Lure Of Chaos 20.06.2012 22:01 # +2
3.14159265 21.06.2012 14:35 # +1
Такие теги парсеру своёму будешь писать.
TarasB 22.06.2012 10:31 # −4
Слышь бля хуле тут распизделся?
roman-kashitsyn 22.06.2012 10:35 # 0
3.14159265 20.06.2012 17:09 # +6
bormand 20.06.2012 17:15 # +6
3.14159265 20.06.2012 17:17 # +5
bormand 20.06.2012 17:30 # +8
3.14159265 20.06.2012 17:34 # +5
Lure Of Chaos 20.06.2012 22:03 # +1
3.14159265 21.06.2012 14:37 # +3
roman-kashitsyn 20.06.2012 10:20 # +3
Lure Of Chaos 20.06.2012 22:05 # 0
3.14159265 20.06.2012 14:11 # +2
Ну это можно улучшать бесконечно, лол
Я тоже когда-то написал 2 таких метода. И ни в одном из них нет тупой проверки на каждой итерации > if(sb.length() != 0)
В JDK14 варианте - allow nulls
3.14159265 20.06.2012 14:12 # +1
tir 20.06.2012 16:01 # 0
bormand 20.06.2012 16:07 # +1
tir 20.06.2012 16:10 # 0
tir 20.06.2012 16:15 # 0
bormand 20.06.2012 16:24 # 0
tir 20.06.2012 16:26 # 0
bormand 20.06.2012 16:32 # 0
tir 20.06.2012 16:34 # 0
bormand 20.06.2012 16:35 # 0
tir 20.06.2012 16:50 # +1
bormand 20.06.2012 16:58 # +1
3.14159265 20.06.2012 16:17 # 0
Глянул одним глазом в сырцы гуавы - даже в гугле с этим согласны:
tir 20.06.2012 16:28 # 0
roman-kashitsyn 20.06.2012 16:33 # +3
tir 20.06.2012 16:37 # 0
bormand 20.06.2012 16:38 # 0
roman-kashitsyn 20.06.2012 16:40 # +3
3.14159265 20.06.2012 16:45 # 0
Итераторы же это и есть сама по себе концепция ленивых вычислений.
tir 20.06.2012 16:57 # 0
roman-kashitsyn 20.06.2012 17:00 # +1
tir 20.06.2012 17:04 # 0
roman-kashitsyn 20.06.2012 17:08 # 0
roman-kashitsyn 20.06.2012 17:17 # 0
tir 20.06.2012 21:46 # 0
tir 20.06.2012 17:24 # +1
Lure Of Chaos 20.06.2012 22:09 # 0
roman-kashitsyn 20.06.2012 22:14 # +2
Lure Of Chaos 20.06.2012 23:47 # 0
roman-kashitsyn 21.06.2012 01:26 # +1
ОБС: вроде бы создатель Groovy так проникся Scala, что заявил, что не стал бы делать Groovy, если бы узнал о Scala вовремя.
roman-kashitsyn 21.06.2012 11:47 # 0
"I can honestly say if someone had shown me the Programming in Scala book by by Martin Odersky, Lex Spoon & Bill Venners back in 2003 I'd probably have never created Groovy."
koodeer 21.06.2012 15:08 # +2
Груви не нужен!
Динамическая типизация не нужна!
Lure Of Chaos 21.06.2012 15:26 # +1
Из-за статической типизации появляются такие запутанные и тормозные штуки, как reflection.
Steve_Brown 21.06.2012 16:37 # +3
koodeer 21.06.2012 20:07 # +1
А если есть метапрограммирование, то рефлексия не нужна. Хай живе Немерле!
tir 21.06.2012 21:51 # −1
Lure Of Chaos 22.06.2012 01:09 # 0
вот, к примеру,вызов метода по имени;
js: почему в java я для того же эффекта должен писать тут даже php смотрится почти хорошо: смотрите, какая запись понятнее?
и это простой пример, а обычно нужно еще сложнее - скажем, недавняя реальная задача:
у данной неизвестной JPA сущности @Entity, чей класс задан generic'ом<E>,
нужно найти ее свойства, заданные либо public полями xxx, либо public геттерами getXxx(), за исключением getClass(),
с последующими чтением\записью из\в свойства по их имени "xxx",
перед этим проверяя возможность доступа конкретного User'a по его ролям, и ролям, перечисленным в аннотации @Roles({"role1","role2"}) к свойству (в поле или аксессоре).
воот. на самом деле там еще веселее, задача создать CRUD юзеринтерфейс для сущностей :З
roman-kashitsyn 22.06.2012 01:29 # +1
Lure Of Chaos 22.06.2012 10:40 # 0
roman-kashitsyn 22.06.2012 10:48 # +1
> как это сделано в питоне
Не совсем понял по поводу питона... Идеологически там строгая динамическая типизация. Т.е., к примеру, сложить строку с числом нельзя. Это всё полито сверху утиной типизацией. В целом довольно удобно.
Задача, описанная выше, решается на питоне достаточно просто при использовании метаклассов (или декораторов, хотя метаклассы тут вроде больше подходят). В Django кажить реализовано практически тоже самое.
Lure Of Chaos 22.06.2012 10:53 # 0
если переменная, поле или параметр метода обьявлен с типом, то далее тип контролируется. если же обьявление идет через def/var, то тип может меняться во время выполнения.
TarasB 22.06.2012 10:53 # 0
roman-kashitsyn 22.06.2012 11:39 # 0
Очень много всего. Например, выбирать реализацию модуля, который нужно загрузить, в рантайме. Можно вызывать метод по имени, вот пример прокси: Или, например, можно переопределить способ создания класса: метакласс получает на вход то, что определил пользователь в коде, может поглядеть аттрибуты и методы, добавить новых или заменить поля (как, например, делает ORM Django). Так можно осуществлять автоматическую генерацию boilerplate кода прямо в рантайме.
Steve_Brown 22.06.2012 09:46 # 0
Джавовская. Сразу понятно, что делается что-то зафигавыкрученное. Другое дело, если по каким-то причинам такие операции должны быть все время...
roman-kashitsyn 22.06.2012 10:52 # +1
Ага, особенно, если дописать обработку всех checked exceptions, иначе код не скомпилится.
3.14159265 21.06.2012 12:38 # 0
Джедаи.
roman-kashitsyn 21.06.2012 13:26 # 0
3.14159265 21.06.2012 15:21 # +1
Я подумал что это какая-то игрушка из серии star wars.
roman-kashitsyn 21.06.2012 15:37 # +1
bormand 21.06.2012 15:37 # +4
Хранилище солнечных ионов?
roman-kashitsyn 21.06.2012 15:39 # +2
Set Union Store
http://redis.io/commands/sunionstore
3.14159265 21.06.2012 15:43 # +1
Ну я тоже так прочитал. Если смотреть с точки зрения зв - логично.
3.14159265 25.06.2012 18:34 # +2
Там действительно толковые парни:
Whenever possible, Guava prefers to provide utilities accepting an Iterable rather than a Collection. Here at Google, it's not out of the ordinary to encounter a "collection" that isn't actually stored in main memory, but is being gathered from a database, or from another data center, and can't support operations like size() without actually grabbing all of the elements.
tir 20.06.2012 16:48 # +1
guest 21.06.2012 23:30 # −5