Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Cuțit/ briceag drumetie

Cum am acces la o parte dintr-un ...

Mother's Day

Recomandare aparat de vidat alime...
 Izolatie exterioara casa parter P...

Cuvinte si expresii neclare

Mod de lucru Purmo Tempco Digital...

Samsung S90C vs LG C3
 Problema sunet RCS

Amortizor sertare bucatarie

Codrea Pallady

Blocurile goale! Orase in car...
 Motorul pe benzina 1.0 SCe65

Mostenire In 1986

Lentile sferica pentru astigmatism

Problema inlocuire usa spate A6 C...
 

Java 8 streams

- - - - -
  • Please log in to reply
81 replies to this topic

#73
Mosotti

Mosotti

    Geniu umil

  • Grup: Senior Members
  • Posts: 33,295
  • Înscris: 21.04.2004
Probabil la scoala aia aveau bani doar pentru un premiant :lol:

Se intimpla si in alte ramuri fie mai multi cu acelasi premiu, la sport se inghesuie citeodata pe podium... Bine ca nu erau premiati de programu cu streamuri ca se bateau intre ei...

#74
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,252
  • Înscris: 24.02.2007

View Postdani.user, on 08 mai 2019 - 19:59, said:

Sa se afiseze media pe clasa (9, 10, etc) a celor ce iau premiul 3.

Aici am mentionat 9, 10, etc, nu 9A, 10B. Eram interesat sa compar, de exemplu, ce medii au cei cu premiul 3 in clasa 12-a fata de cei din clasa a 9-a.

Varianta mea, dintr-o bucata
import scala.io.Source

object MediiElevi {

  def main(args: Array[String]): Unit = {

	Source.fromFile("elevi.csv").getLines().drop(1).map(_.split(','))
	  .map(s => MedieElev(nume = s(0), clasa = s(1), materie = s(2), medie = s(3).toInt)).toArray
	  //note elevi
	  .groupBy(m => (m.nume, m.clasa)).map { case ((nume, clasa), mediiAleElevului) =>
	  Elev(nume, clasa, medieAnuala = BigDecimal(mediiAleElevului.map(_.medie).sum) / mediiAleElevului.length)
	}.toArray
	  //medii elevi
	  .groupBy(_.clasa).flatMap { case (clasa, eleviDinClasa) =>
	  eleviDinClasa.groupBy(_.medieAnuala).toArray.sortBy { case (medie, eleviCuAceeasiMedie) => -medie }
		.slice(2, 3).flatMap { case (medie, eleviCuAceeasiMedie) => eleviCuAceeasiMedie }
	}.toArray
	  //elevi cu premiul 3
	  .groupBy(_.numarClasa).map { case (numarClasa, elevi) => (numarClasa, elevi.map(_.medieAnuala).sum / elevi.length) }
	  //mediile elevilor cu premiul 3 din fiecare clasa
	  .toArray.sortBy { case (clasa, medieClasa) => clasa }
	  .foreach { case (clasa, medieClasa) => println(s"Clasa $clasa, Medie $medieClasa") }
  }

  case class MedieElev(nume: String, clasa: String, materie: String, medie: Int)

  case class Elev(nume: String, clasa: String, medieAnuala: BigDecimal) {

	def numarClasa: Int = clasa.substring(0, clasa.length - 1).toInt
  }

}


Quote

Clasa 9, Medie 8.166666666666666666666666666666667
Clasa 10, Medie 8.325
Clasa 11, Medie 8.25
Clasa 12, Medie 8.277777777777777777777777777777778

Am fost mai explicit, sa nu se sperie lumea daca vede _._2._1. E chiar atat de criptic codul?

Edited by dani.user, 19 May 2019 - 12:36.


#75
Iulius-Foyas

Iulius-Foyas

    Active Member

  • Grup: Members
  • Posts: 1,361
  • Înscris: 21.04.2019

View PostOriginalCopy, on 19 mai 2019 - 10:54, said:

De ce nu te incumeti?

Scrii un pomelnic de teorie in postari, dar la practica dai de greu?
Ok, o sa fac si varianta aia cu mai multi pe un loc :lol:

View Postdani.user, on 19 mai 2019 - 12:36, said:

Am fost mai explicit, sa nu se sperie lumea daca vede _._2._1. E chiar atat de criptic codul?
Pe mine nu este, dar mie imi place varianta aia cu 9A, 9B ca asa erau clasele numite.

#76
adamsd

adamsd

    Member

  • Grup: Members
  • Posts: 611
  • Înscris: 16.04.2019

View Postdani.user, on 10 mai 2019 - 19:44, said:

//ROW_NUMBER() OVER (PARTITION BY clasa ORDER BY medie)

.sorted(Comparator.comparing(e -> new ComparablePair<>(e.getClasa(), e.getMedie())))

return new Pair<>(++rowNumber[0], e);

Zici ca asta ar fi Java?

View Postdani.user, on 19 mai 2019 - 12:36, said:

Aici am mentionat 9, 10, etc, nu 9A, 10B. Eram interesat sa compar, de exemplu, ce medii au cei cu premiul 3 in clasa 12-a fata de cei din clasa a 9-a.
Cand zici "pe clasa" mai degraba se intelege o singura clasa(de elevi). Pentru ce vrei tu, mai degraba "media claselor a 9a, media claselor a 10a, samd".

View Postdani.user, on 19 mai 2019 - 12:36, said:

E chiar atat de criptic codul?
Da. Sunt foarte greu de parcurs transformarile alea sa vezi cum arata structura de date cand se ajunge la toArray  si cum se proceseaza in urmatorii pasi si ce iese la final.

#77
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,252
  • Înscris: 24.02.2007

View Postadamsd, on 25 mai 2019 - 10:45, said:

Zici ca asta ar fi Java?

Daca nu ma inseala memorie, codul acela l-am scris in Java. Si a trebuit sa-mi definesc propria clasa pentru pereche fiindca nici atat nu ofera in biblioteca standard.

#78
Iulius-Foyas

Iulius-Foyas

    Active Member

  • Grup: Members
  • Posts: 1,361
  • Înscris: 21.04.2019

Quote

pereche fiindca nici atat nu ofera
AbstractMap.SimpleEntry<K,V>  https://docs.oracle....impleEntry.html

Quote

Daca nu ma inseala memorie, codul acela l-am scris in Java.
Dupa dialect este scala si nu java.
Daca l-ai compilat pt jdk 8 , atunci este scala , daca l-ai compilat pt jdk 10+ atunci poate fi si java.

Cum ziceam si in alt post, scala si java sunt surori gemene.

View PostOriginalCopy, on 19 mai 2019 - 09:33, said:

Te astept cu codul actualizat cu un parametru boolean care schimba intre cele doua strategii. Ca tot esti bun la java.
Stai linistit ca nu te-am uitat, am multe pe cap.

Edited by Iulius-Foyas, 25 May 2019 - 14:48.


#79
Mosotti

Mosotti

    Geniu umil

  • Grup: Senior Members
  • Posts: 33,295
  • Înscris: 21.04.2004

View Postdani.user, on 25 mai 2019 - 13:51, said:

Daca nu ma inseala memorie, codul acela l-am scris in Java. Si a trebuit sa-mi definesc propria clasa pentru pereche fiindca nici atat nu ofera in biblioteca standard.
Exista un motiv bun pentru care nu exista clasa Pair in java. O clasa Pair generica nu ofera nici un fel de informatii despre legatura dintre cele doua valori continute. Tu, ca programator original, stii ce e pe-acolo, cel putin pentru o vreme. Altul o sa se intrebe mult si bine ce se afla in first si second. Iar daca folosesti mai multe Pair deodata, practic meciul e complet fu

Asa ca, dpdv al intelegerii codului e mult mai bine sa folosesti o clasa Range(begin, end) decit Pair(first, second) de exemplu.

Pe de alta parte, daca chiar vrei sa folosesti asa ceva, exista toate prostiile din univers in bibliotecile Apache...

#80
adamsd

adamsd

    Member

  • Grup: Members
  • Posts: 611
  • Înscris: 16.04.2019

View Postdani.user, on 25 mai 2019 - 13:51, said:

Daca nu ma inseala memorie, codul acela l-am scris in Java. Si a trebuit sa-mi definesc propria clasa pentru pereche fiindca nici atat nu ofera in biblioteca standard.
Eu cred ca te inseala.

Idiomul cu diamond operator new Clasa<>(...) nu merge folosit decat in ceva gen Clasa<String, Integer> = new Clasa<>();

Comparator.comparing cu un singur parametru necesita un "key extractor" adica o expresie lambda sau method reference(ex. ce face referire la un membru fie ce are natural ordering, fie ce implementeaza comparable - sau poti baga custom ca al doilea paramentru)  ... ar fi ceva gen Comparator.comparing(Elev::getClasa).thenComparing(Elev::getMedie); direct pe ceva colectie de Elev

#81
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,252
  • Înscris: 24.02.2007

View Postadamsd, on 01 iunie 2019 - 15:59, said:

Idiomul cu diamond operator new Clasa<>(...) nu merge folosit decat in ceva gen Clasa<String, Integer> = new Clasa<>();

Atunci de ce codul de mai jos compileaza fara probleme (cu OpenJDK 11)?

public class Test {
   
	static class Foo<A, B> {
		public Foo(A a, B b) {
			this.a = a;
			this.b = b;
		}
	   
		private A a;
		private B b;
	}
   
	private static void testFoo(Object foo) {
	}
   
	public static void main(String args[]) {
		testFoo(new Foo<>("Hello", 1));
	}
}


View Postadamsd, on 01 iunie 2019 - 15:59, said:

fie ce implementeaza comparable

Ma asteptam sa se inteleaga din nume ca a mea clasa ComparablePair implementeaza Comparable

Edited by dani.user, 01 June 2019 - 18:31.


#82
adamsd

adamsd

    Member

  • Grup: Members
  • Posts: 611
  • Înscris: 16.04.2019

View Postdani.user, on 01 iunie 2019 - 18:30, said:

Atunci de ce codul de mai jos compileaza fara probleme (cu OpenJDK 11)?
Degeaba. E identic cu new Foo("Hello", 1); pierzi informatia despre tipuri si trebuie sa faci casting manual cu tipurile corecte...

View Postdani.user, on 01 iunie 2019 - 18:30, said:

Ma asteptam sa se inteleaga din nume ca a mea clasa ComparablePair implementeaza Comparable
Nu stiu ce ai facut tu in ComparablePair, dar dupa cum arata codul, pare "suspect" ... ideea lui Comparator.comparing e sa-ti dea un comparator custom ...

Anunturi

Second Opinion Second Opinion

Folosind serviciul second opinion ne puteți trimite RMN-uri, CT -uri, angiografii, fișiere .pdf, documente medicale.

Astfel vă vom putea da o opinie neurochirurgicală, fără ca aceasta să poată înlocui un consult de specialitate. Răspunsurile vor fi date prin e-mail în cel mai scurt timp posibil (de obicei în mai putin de 24 de ore, dar nu mai mult de 48 de ore). Second opinion – Neurohope este un serviciu gratuit.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate