Професионална програма
Loading...
+ Нов въпрос
DenislavPetkov avatar DenislavPetkov 0 Точки

Tech Module Java // 07. Student Academy

Здравейте може ли помощ за 07. Student Academy https://pastebin.com/0jgDAg00 накрая немога да го измисля как да ги сортирам descending по average grade?

1.Student Academy

Write a program, which keeps information about students and their grades.

You will receive n pair of rows. First you will receive the student's name, after that you will receive his grade. Check if student already exists, and if not, add him. Keep track of all grades for each student.

When you finish reading data, keep students with average grade higher or equal to 4.50. Order filtered students by average grade in descending.

Print the students and their average grade in format:

"{name} –> {averageGrade}"

Format the average grade to the 2nd decimal place.

Examples

Input

Output

 

Input

Output

5

John

5.5

John

4.5

Alice

6

Alice

3

George

5

John -> 5.00

George -> 5.00

Alice -> 4.50

 

5

Amanda

3.5

Amanda

4

Rob

5.5

Christian

5

Robert

6

Robert -> 6.00

Rob -> 5.50

Christian -> 5.00

0
Programming Fundamentals
KeepCoding avatar KeepCoding 553 Точки
Best Answer

Сортировката я прилагаш не където трябва. ".foreach" просто е един цикъл по елементите на някоя колекция. А не е много добра идея да се сортира една колекция, докато се обикаля. Ти даже сортираш само оценките на един ученик преди да му намериш средната такава, а не учениците по средната им оценка.

Ето едно решение, което ползва няколко стрийм метода: линк. "Pair" работи като елементите на един мап. Има си .getKey() и .getValue(). Ползвах го, защото елементите на мапът не можах да ги променя към малко по-различен "Map.Entry", а не ми се искаше повече от един път да се смята средната оценка на един ученик.


Ако нещо не е ясно, пиши.

0
DenislavPetkov avatar DenislavPetkov 0 Точки

Демек  "Pair<>" взима key и му слага съответният averageGrade,като value ?

  1. students.entrySet().stream()

  2.                 .map(e -> {

  3.                     Double averageGrade = e.getValue().stream().mapToDouble(x -> x).average().getAsDouble();

  4.                     return new Pair<>(e.getKey(), averageGrade);

0
18/03/2019 12:24:23
Elvir avatar Elvir 6 Точки

https://pastebin.com/zUDUzNCS 

ето едно примерно решение.

0
svetlakrasteva avatar svetlakrasteva 7 Точки

Аз ти благодаря, защото със сортировките малко съм скарана, но твоето решение го разбирам.

Кода на предишния колега е много advanced за мен.

0