HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Флуд > Вопрос по Java 8
  Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
Chyvachok
Житель форума

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 1595

Рейтинг



Вопрос по Java 8

Интересно тут есть знатоки джавы? Есть несколько заданий по лямбда выражениям и Stream Api, вот только в эти лямбды я очень туго вьезжаю, хотел бы спросить пару советов как и с ними работать. Смысл задания в том чтобы в return return List.stream() и далее функциями этого стрима реализовать задание, при помощи filter, map, flatmap и так далее, но есть пара заданий что я никак не могу придумать, хотелось спросить совета.

C++ Source Code:
1
Write functional programming lambda expressions using Java 8 streams. Each task must be solved with one lambda expressions. Put lambda expressions in the return statement1.
2
 
3
Task 8. - вприципе не понимаю что от меня хотят, я в математике не силен и не знаю что такое ordinal number inclusive.
4
 
5
You are given a positive integer K and integer D and a sequence of integers integerList. Compute a union of two subsets of integers: the first subset is all values of integerList greater than D, the second subset is an integer list of values starting with an element with ordinal number K inclusive (the numbering of elements in the integer list starting from 0). Sort the resulting sequence in descending order. For example:
6
input: D = 3, K = 4, integerList{-10, 3, -3, 4, 55, 6}
7
output: {55, 6, 4}
8
 
9
Task 9. - хотелось бы совета.
10
 
11
A sequence of non-empty strings stringList is given, containing only uppercase letters of the Latin alphabet. For all strings starting with the same letter, determine their total length and obtain a sequence of strings of the form "S-C", where S is the total length of all strings from stringList that begin with the character C. Order the resulting sequence in descending order of the numerical values of the sums, and for equal values of the sums, in ascending order of the C character codes. For example:
12
input: {"ABC", "A", "BCD", "D"}
13
output: {"4-A", "3-B", "1-D"}
14
 
15
В конце есть такой пример выполнения простого задания, по которому я первые делал:
16
An example of solving a task in AutoCode.
17
 
18
Task. Given a sequence of strings stringList. Get a new list of non-empty strings from stringList.
19
 
20
public static List<String> getStringList(List<String> stringList){
21
  return stringList.stream()
22
  .filter(string -> !string.isEmpty())
23
  .collect(Collectors.toList());
24
}

Сообщить модератору | | IP: Записан
Сообщение: 202116

Старое сообщение 04-06-2021 11:07
- За что?
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 27784
Нанёс повреждений: 386 ед.

Рейтинг



Лямбда это локальная безымянная функция такая. Для удобства.

__________________
My Projects: download page

Блог разработчика на boosty.to
Блог разработчика в телеграме

Сообщить модератору | | IP: Записан
Сообщение: 202119

Старое сообщение 04-06-2021 15:54
-
AntiPlayer
Highway to Hell

Дата регистрации: May 2006
Проживает: Смоленск
Сообщений: 879
Возраст: 30

Рейтинг



Первая задача на JavaScript решалась бы примерно так, если я верно понял условия (можешь вставить в консоль браузера и проверить). Я думаю подобный синтаксис поймет любой, кто общался с C-подобным синтаксисом.

code:
const d = 3; const k = 4; const integerList = [-10, 3, -3, 4, 55, 6]; const resultOfSubset = integerList.filter( (elem) => elem > d); const resultOfSubsetK = integerList.filter( (_, index) => index >= k); const union = [...new Set(...[resultOfSubsetD, ...resultOfSubsetK])].sort((a,b)=> b-a) console.log(union ); // -> [55, 6, 4]


Тебе нужно получить два массива:
первый это там, где все элементы больше D
второй это все элементы, у которых индекс больше К
Дальше сделать объединение "union" и сортировку.

Но здесь непонятно, зачем столько телодвижений, если объединенный массив получается довольно простым условием "или":

code:
const d = 3; const k = 4; const integerList = [-10, 3, -3, 4, 55, 6]; const union = integerList.filter((number, index) => current > d || index >= k ).sort((a,b)=> b-a) console.log(union ); // -> [55, 6, 4]


PS: ordinal number inclusive -- это индекс элемента в массиве включительно.

__________________
I tell you to enjoy life

Сообщить модератору | | IP: Записан
Сообщение: 202146

Старое сообщение 07-06-2021 09:14
- За что?
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 27784
Нанёс повреждений: 386 ед.

Рейтинг



обожаю языки с нестрогой типизацией. Возьмём немного кой-чего

C++ Source Code:
console.log(union );

Тоже хорошо.

__________________
My Projects: download page

Блог разработчика на boosty.to
Блог разработчика в телеграме

Сообщить модератору | | IP: Записан
Сообщение: 202147

Старое сообщение 07-06-2021 11:50
-
DEAD MAN
Mono

Группа: Опытный
Дата регистрации: Oct 2005
Проживает: Tallinn
Сообщений: 1223
Возраст: 30

Рейтинг



Chyvachok Я конечно стримы вроде как не плохо знаю, но 9 задание сделать в скопе одного стрима мне кажется нереальным. Единственное, что пришло в голову, но это по заданию вроде как неверно, ибо чейняться 2 стрима:

code:
List<String> result = Stream.of("ABC", "A", "BCD", "D") .map(string -> new AbstractMap.SimpleEntry<>(string.charAt(0), string.length())) .collect( Collectors.collectingAndThen(Collector.of((Supplier<HashMap<Character, Integer>>) HashMap::new, (map, entry) -> { int prevSize = map.getOrDefault(entry.getKey(), 0); map.put(entry.getKey(), prevSize + entry.getValue()); }, (a, b) -> { throw new UnsupportedOperationException(); }), map -> map.entrySet() .stream())) .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())) .map(entry -> entry.getValue() + "-" + entry.getKey()) .collect(Collectors.toList());

Сообщить модератору | | IP: Записан
Сообщение: 202148

Старое сообщение 07-06-2021 20:41
- За что?
Chyvachok
Житель форума

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 1595

Рейтинг



Спасибо за ответы, осилил все, правда реализация порой либо слишком громозкая выходит, но главное чтобы работало, остальное вторично.

Конечно в скопе одного стрима все делать жутко не удобно было. Все эти функции похожи на цикл forEach, то есть перебирают лист по каждому элементу по очереди, но нету возможности как в обычном for получить следующий либо прошлый элемент, не знаю, чем эти лямбды и стримы сильно лучше обычных там циклов и прочего, ладно если один лист там отсортировать, или отсеить что-то, может оно и компактней будет, сложные операции через циклы мне кажется и компактнее и лучше будут, а тут просто мешанина была, с теми же циклами внутри методов map.

Сообщить модератору | | IP: Записан
Сообщение: 202149

Старое сообщение 08-06-2021 07:51
- За что?
Gandalv
Частый гость

Дата регистрации: Mar 2021
Проживает: Калуга
Сообщений: 38

Рейтинг



> перебирают лист по каждому элементу по очереди,
В 99% случаев при коммерческом перекладывании джейсонов этого достаточно.

> но нету возможности как в обычном for получить следующий либо прошлый элемент
Для этого есть оператор reduce и некоторые другие операторы (не знаю как конкретно в Java). В общем, в большинстве случаев можно обойтись без циклов, если ты не реализовываешь какой-то мега сложный алгоритм)

> не знаю, чем эти лямбды и стримы сильно лучше обычных там циклов и прочего
Меньше буков, при этом легче читается. Я уж не помню, когда циклы в последний раз использовал.

__________________
Углеродные звезды с древними спутниками, которые колонизируют разумные грибы...
Газовые гиганты, на которых обитает метеорологический разум...
Миры, растянутые на мембранах, где измерения пересекаются...
Это невозможно описать нашим ограниченным языком...

Отредактировано Gandalv 08-06-2021 в 08:56

Сообщить модератору | | IP: Записан
Сообщение: 202150

Старое сообщение 08-06-2021 08:49
- За что?
AntiPlayer
Highway to Hell

Дата регистрации: May 2006
Проживает: Смоленск
Сообщений: 879
Возраст: 30

Рейтинг



Цитата:
Chyvachok писал:
чем эти лямбды и стримы сильно лучше обычных там циклов и прочего


Это возможность писать в функциональном стиле.

__________________
I tell you to enjoy life

Сообщить модератору | | IP: Записан
Сообщение: 202151

Старое сообщение 08-06-2021 09:29
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 14:14. Новая тема    Ответить
  Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Флуд > Вопрос по Java 8
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2021