Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 [6] 7   вперед  Ctrl      все
 Re: Stream API  [new]
mayton
Member

Откуда: loopback
Сообщений: 45470
Ну ево в болото этого блинова. Лучше подумайте хором когда последний раз вам нужно
было делать операции группировки или аналитики над Stream и вы колебались
между выбором где это сделать. На уровне DBMS или Application.
11 мар 20, 13:47    [22096831]     Ответить | Цитировать Сообщить модератору
 Re: Stream API  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2991
чтобы ответить на твой вопрос нужно понять несколько вещей
на чем твое приложение построено-чистый jdbs или одна из имплементаций jpa
далее уже взять конретнуб имплементацию и залезть под ее капот - выяснив ,как реализована данная функция
уже после этого делать выводы какие
но наверно правильней те функции,которые умеет база -оставить базе или жпашке
вместо наворачиваний в сервис слое мусорных объектов
11 мар 20, 15:08    [22096920]     Ответить | Цитировать Сообщить модератору
 Re: Stream API  [new]
mayton
Member

Откуда: loopback
Сообщений: 45470
Я вообще не про то как она реализована внутри. А я про УДОБСТВО ее применения и про фактическую
ВОЗМОЖНОСТЬ. Я знаю что алгоритмически любой SQL запрос мы можем реализовать на Java
при условии что просто имеет доступ к сырым данным.

Но сама реализация его на SQL может быть более выгодной. Кода меньше. А разработчику
чем меньше кода - тем лучше. Это лаконично. Это удобно поддерживать.

Я подниму отдельный топик. Наверное в ПТ на эту тему.
11 мар 20, 15:13    [22096923]     Ответить | Цитировать Сообщить модератору
 Re: Stream API  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4489
mayton
Я подниму отдельный топик. Наверное в ПТ на эту тему.
не пугай их там Stream.
Обзови топик просто: "двухзвенка или трехзвенка".
)))
11 мар 20, 15:16    [22096924]     Ответить | Цитировать Сообщить модератору
 Re: Stream API  [new]
mayton
Member

Откуда: loopback
Сообщений: 45470
ПТ - это пятница. А не то что ты подумал
11 мар 20, 15:18    [22096925]     Ответить | Цитировать Сообщить модератору
 Re: Stream API  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4489
mayton
ПТ - это пятница. А не то что ты подумал
аха ха))))
11 мар 20, 15:24    [22096927]     Ответить | Цитировать Сообщить модератору
 Re: Stream API  [new]
faustgreen
Member

Откуда:
Сообщений: 377
Присоединюсь к клубу извращенцев:
работает, если в стриме только 2 элемента и брасает unchekedException.

import java.util.Optional;
import java.util.stream.Stream;

public class OneValue {
	public static void main(String[] args) throws Exception {
		Adress ad1 = new Adress("Minsk"  , "644", "Orlovskai");
		Adress ad2 = new Adress("Minsk"  , "643", "Pobeditelei");
		
		Stream<Adress> stream = Stream.of(ad1, ad2);
		stream.filter(adres -> adres.getPostCode().equals("643"))
		      .reduce(Optional.<Adress>empty(), (acc, element) -> acc.equals(Optional.empty()) ? Optional.of(element) : Optional.<Adress>empty(), (acc, element) -> Optional.<Adress>empty())
		      .ifPresent((value)-> {throw new RuntimeException("Some message");}   );
	}
}

class Adress{
	private final String city;
	private final String postCode;
	private final String street;
	
	Adress(String city, String postCode, String street){
		this.city = city;
		this.postCode = postCode;
		this.street = street;
	}

	public String getCity() {
		return city;
	}

	public String getPostCode() {
		return postCode;
	}

	public String getStreet() {
		return street;
	}

	@Override
	public String toString() {
		return "Adress [city=" + city + ", postCode=" + postCode + ", street=" + street + "]";
	}

}


Тут походу в цепочке операций со стримом в конце нужно вернуть Optional, чтобы иметь возможность выбросить исключение через метод orElseThrow. Но я как то не нашел подходящих операций, которые удовлетворяли бы условиям автора (Не содержать if и не создавать новые объектов).
11 мар 20, 16:21    [22096966]     Ответить | Цитировать Сообщить модератору
 Re: Stream API  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4489
faustgreen
условиям автора

"Один дурак может задать столько вопросов что и 100 мудрецов не ответят" [(с) В.И. Ленин ПСС том 8 стр.15, работа "Как нам преобразовать РабКрин"]
11 мар 20, 16:48    [22096996]     Ответить | Цитировать Сообщить модератору
 Re: Stream API  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2991
faustgreen
Присоединюсь к клубу извращенцев:
работает, если в стриме только 2 элемента и брасает unchekedException.

import java.util.Optional;
import java.util.stream.Stream;

public class OneValue {
	public static void main(String[] args) throws Exception {
		Adress ad1 = new Adress("Minsk"  , "644", "Orlovskai");
		Adress ad2 = new Adress("Minsk"  , "643", "Pobeditelei");
		
		Stream<Adress> stream = Stream.of(ad1, ad2);
		stream.filter(adres -> adres.getPostCode().equals("643"))
		      .reduce(Optional.<Adress>empty(), (acc, element) -> acc.equals(Optional.empty()) ? Optional.of(element) : Optional.<Adress>empty(), (acc, element) -> Optional.<Adress>empty())
		      .ifPresent((value)-> {throw new RuntimeException("Some message");}   );
	}
}

class Adress{
	private final String city;
	private final String postCode;
	private final String street;
	
	Adress(String city, String postCode, String street){
		this.city = city;
		this.postCode = postCode;
		this.street = street;
	}

	public String getCity() {
		return city;
	}

	public String getPostCode() {
		return postCode;
	}

	public String getStreet() {
		return street;
	}

	@Override
	public String toString() {
		return "Adress [city=" + city + ", postCode=" + postCode + ", street=" + street + "]";
	}

}


Тут походу в цепочке операций со стримом в конце нужно вернуть Optional, чтобы иметь возможность выбросить исключение через метод orElseThrow. Но я как то не нашел подходящих операций, которые удовлетворяли бы условиям автора (Не содержать if и не создавать новые объектов).


это портянка не подходит ибо содержит в своем теле тернальный оператор,в условии было сказано без ифов
с ифом это делается в 1 строчку -зачем городить такой огород было,но у памфилова свое видение видимо))
11 мар 20, 17:01    [22097005]     Ответить | Цитировать Сообщить модератору
 Re: Stream API  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2991
faustgreen
Но я как то не нашел подходящих операций, которые удовлетворяли бы условиям автора (Не содержать if и не создавать новые объектов).

и не найдешь,эта задача не имеет решения в озвученных условиях.
Пришлось втыкать иф
11 мар 20, 17:03    [22097008]     Ответить | Цитировать Сообщить модератору
 Re: Stream API  [new]
faustgreen
Member

Откуда:
Сообщений: 377
asv79, Я как раз изучаю стримы (около недели), вот и решил попробовать свой вариант. Сбрось, если несложно вариант с ифом.
11 мар 20, 17:10    [22097014]     Ответить | Цитировать Сообщить модератору
 Re: Stream API  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2991
faustgreen
asv79, Я как раз изучаю стримы (около недели), вот и решил попробовать свой вариант. Сбрось, если несложно вариант с ифом.

вот смотри вместо портянки памфилова 2 строчки кода

ДТО для теста

import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(fluent = true)
class Item {
    private String code;
    
}


логика
import java.util.Arrays;
import java.util.List;

import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.toList;

public class Main {

    public static void main(String[] args) {
        List<Item> list = Arrays.asList(new Item().code("643"), new Item().code("810"));
        list.stream()
                .filter(x -> x.code().equals("643"))
                .collect(collectingAndThen(toList(), l -> {
                    if (l.size() != 2) throw new NullPointerException();
                    return l;
                }));
    }
}

если в листе будет не 2 элемента - кинет эксепшн,я кинул нул поинтер для наглядности(так как это анчекед исключение - не нужно трай кетч использовать,чтобы не загромождать код)

Сообщение было отредактировано: 11 мар 20, 17:49
11 мар 20, 17:46    [22097058]     Ответить | Цитировать Сообщить модератору
 Re: Stream API  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4489
faustgreen,
Stream str = получили из сервиса
List<String> lst = str.filter(.................... toList...
if (lst......)
    делаем что надо

ТС просто дурку включил и упирался до последнего.
11 мар 20, 17:57    [22097065]     Ответить | Цитировать Сообщить модератору
 Re: Stream API  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8475
asv79

а ты не видишь разницы между key-value
surname/lastname это поля DTO
а 643- это значение из справочника- .....

Бред какой-то.

Если это значение из справочника (в моем понимании справочника, который может дополняться/меняться) - то что оно делает в коде программы?

asv79

если у нас сейчас предполагается ,что кредитьы будут рублевые -валидируем по 643 - и например я соглсен с блиновым что эти значения нужно выносить в проперти,чтобы если бизнес скажет - теперь выдаем в долларах я просто рестартнул приложение с новым скриптом,без передеплоев и перекомпиляций- согласись в этом есть здавый смысл

Такой же бред

Почему валюта кредита не выбирается в лист-боксе на экране и для того, что бы выдать кредит в другой валюте нужно что-то там перезапускать?

Давайте тогда и имя клиента, и сумму кредита тоже в проперти хранить! Очень удобно! Нужно бизнесу выдать новый кредит - поменяли проперти - перезагрузили сервер и вуа-ля... кредит выдали!
11 мар 20, 19:17    [22097135]     Ответить | Цитировать Сообщить модератору
 Re: Stream API  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2991
Leonid Kudryavtsev

Бред какой-то.

Если это значение из справочника (в моем понимании справочника, который может дополняться/меняться) - то что оно делает в коде программы?
!

про валидаторы и тесты слышал?есть такое в ентерпрайзе))
11 мар 20, 19:28    [22097139]     Ответить | Цитировать Сообщить модератору
 Re: Stream API  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2991
Leonid Kudryavtsev

Такой же бред

Почему валюта кредита не выбирается в лист-боксе на экране и для того, что бы выдать кредит в другой валюте нужно что-то там перезапускать?

на экране чего?мы разрабатываем апи дядя ))
мне не важно что там на экране ,Мне важно что мне приходит и что я отдаю,Я никаким боком не знаю и знать не хочу что там на стороне UI
валюта кредита у нас одна Рубли,это прописано в спецификации
но если нам прилетит другая валюта я должен выдать обратно бизнес еррор
ферштейн?
11 мар 20, 19:32    [22097142]     Ответить | Цитировать Сообщить модератору
 Re: Stream API  [new]
mayton
Member

Откуда: loopback
Сообщений: 45470
Мы как-то саппортили систему маркетинг акций для одного моб-оператора. Смена пропертей
выглядела так. Мы просто заводили в БД новое проперсти и у него была дата действия
from=, to=. Суть этого действия была в том что акция активируется обычно в полночь
в 00:00 и после этого маркетинг-система ее делает доступной. Тоесть участия оператора
или девопса не надо. И перегружать ничего не надо. Все проперти и даже их иерархии
были би-темпоальные.
11 мар 20, 19:41    [22097146]     Ответить | Цитировать Сообщить модератору
 Re: Stream API  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4489
asv79
прилетит другая валюта
1000₽ вместо 1000€
)))
11 мар 20, 19:43    [22097148]     Ответить | Цитировать Сообщить модератору
 Re: Stream API  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 27661
asv79
skyANA
пропущено...

Во всех топиках с вакансиями, где ты с улыбкой пишешь, чтобы взяли тебя, требуется опыт работы с базами данных.
Думаешь это не подразумевает умение писать запросы?

вся эта работа сводиться к одному extends JPARepository)
в худщем варианте JOOQ
и я сомневаюсь что в этих вакансиях эти базы еще не спроектированы
все оюычно сводится к редактированию справочников и последующему рефакторингу мапперов и валидаторов

ну и если ты думаешь я зпросы не умею писать ,ты это зря)
да конечно я не смогу там проиндексировать базу или написать какой то супер сложный селект
все остальное я смогу
да и вышенаписаное смогу через пару недель - я не думаю что там прям все так супер сложно - я просто все внимание сосредоточил на джаве и не ошибся,а попросят что то допами я мгновенно изучу ,мне это не впадлу так сказать)

Так всё-таки откуда ты взял, что "можно быть успешным энтерпрайз программистом вообще не умея делать ни 1 запроса"?
11 мар 20, 19:43    [22097149]     Ответить | Цитировать Сообщить модератору
 Re: Stream API  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4489
mayton,
Смена валюты должна быть в Модели. Если там она есть, то все ОК.
Если нет, то значит ЭТО НЕ НУЖНО ни в пропертях ни в скриптах, ни в конфигах.
Зы.
Решение проблемы через задний проход.
11 мар 20, 19:46    [22097151]     Ответить | Цитировать Сообщить модератору
 Re: Stream API  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4489
mayton
заводили в БД новое проперсти
вспомнил. У вас бд key value.
Там модель и есть проперти)
11 мар 20, 19:48    [22097153]     Ответить | Цитировать Сообщить модератору
 Re: Stream API  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8475
asv79
Leonid Kudryavtsev

Бред какой-то.

Если это значение из справочника (в моем понимании справочника, который может дополняться/меняться) - то что оно делает в коде программы?
!

про валидаторы и тесты слышал?есть такое в ентерпрайзе))

если значение "в справочнике", то и валидироваться оно должно по справочнику, а не мифическому проперти или константе

разумеется, могут быть исключения, но исключительно подтверждающие правила

Оно УЖЕ в справочнике. Нахрена городить какой-то проперти, дублирующий справочник?
11 мар 20, 19:51    [22097155]     Ответить | Цитировать Сообщить модератору
 Re: Stream API  [new]
mayton
Member

Откуда: loopback
Сообщений: 45470
Так я и не говорил про смену валюты. Вообще наше представление сейчас о валютах - сейчас поверхностное.
Если в наш топик зайдет дата-аналитик то он просто поржет держась за бока. Валют может быть много
ОДНОВРЕМЕННО. И они тоже могут иметь свойства ДЕЙСТВИЯ на промежутке времени или иметь открытый
интервал действия.
11 мар 20, 19:52    [22097157]     Ответить | Цитировать Сообщить модератору
 Re: Stream API  [new]
mayton
Member

Откуда: loopback
Сообщений: 45470
PetroNotC Sharp
mayton
заводили в БД новое проперсти
вспомнил. У вас бд key value.
Там модель и есть проперти)

У НАС?
11 мар 20, 19:52    [22097158]     Ответить | Цитировать Сообщить модератору
 Re: Stream API  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 27661
Leonid Kudryavtsev
asv79
пропущено...

про валидаторы и тесты слышал?есть такое в ентерпрайзе))

если значение "в справочнике", то и валидироваться оно должно по справочнику, а не мифическому проперти или константе

разумеется, могут быть исключения, но исключительно подтверждающие правила

Оно УЖЕ в справочнике. Нахрена городить какой-то проперти, дублирующий справочник?


asv79
Я никаким боком не знаю и знать не хочу
11 мар 20, 19:53    [22097159]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 [6] 7   вперед  Ctrl      все
Все форумы / Java Ответить