Hirdetés
Új hozzászólás Aktív témák
-
NWNE
csendes tag
Üdv,
létezik olyan publikusan elérhető lib, ami segítene magyarországi egybeírt címek felbontásában? (Irsz. település, közterület, közterület típusa, ajtó, ablak, stb...)?
-
floatr
veterán
válasz Foglalt név #11992 üzenetére
Ilyen méretű és életciklusú projektek esetében megéri saját repot üzemeltetni. Nem gondolom h az ultimate build tool az ant lenne
-
Foglalt név
addikt
válasz floatr #11990 üzenetére
Szerintem az összegereblyézés nem feltétlen a megfelelő előny. Ha a lib-eket berakod direktben a repo-ba, akkor robusztusabb és gyorsabb is, mint ahogy a maven levadássza őket.
Én úgy vélem projektfüggő mit, és hogyan használsz. A mai divatos eldobható szösszeneteket én is inkább összecsapom valamiben.
Ha elő kell vennem egy régi cuccot, aminek az életideje évtizedekben mérhető, csak éppen befut rá egy feature request, akkor azonban mindig meglepődöm, hogy érdekes módon az időm java részében fejlesztek és a végén lefordítom az aktuális java verzióval egy szem hiba nélkül.
Szemben azzal, mikor gradle, spring vagy valamelyik másik framework-ben az idő 60%-ban próbálok rájönni, hogy sikerült egy több százezer fejlesztő által használt keretrendszert kiadni egy olyan patch szintű upgrade-el ami nem visszafelé kompatibilis.
Persze a felháborodásom azon is múlik, hogy CD pipeline-t kell írni a korábban említett őskövülethez, amit legközelebb akkor fogunk kiadni, mikor már nem lesz gitlab.[ Szerkesztve ]
-
dudikpal
senior tag
Heroku is fizetős lett, perszehogyne
Tud vki vmilyen hasonló ingyenes alternatívát, ahova feldobhatom a hobbyprojektemet tesztelgetni?
Az ilyen évente lejáró trialosokkal nem akarok trükközni.
A helio-n meg nem rég váltottak pleskre, és jelenleg a free planban nincs java, ami addig volt.
Angular a front, az ahogy láttam nem lesz nehéz freet találni, csak a spring boot backendemmel koslatok itt, h merre kéne menni vele. -
floatr
veterán
válasz Foglalt név #11989 üzenetére
Ha mérlegre kéne tenni, hogy hány alkalommal futottál bele ilyen jellegű függőségi problémába, és hány alkalommal nem kellett egy projekt elindításánál neki köszönhetően összegereblyézned a libeket, akkor gyanítom, hogy az utóbbi lenne a jellemzőbb.
Nyilván mindenki azt használ, amit akar, meg amit megszabnak neki, de ne tegyünk már úgy, mintha megkeserítené az életét egy fejlesztőnek. -
MODERÁTOR
válasz btraven #11987 üzenetére
Leírja, hogy olyan funkciót használsz ami a jövőben nem lesz táogatott. Ez miért gond?
Itt a deprecated jelentése: [link] . Használj gradle wrappert és akkor fixen használhatsz arhaikus verziót mindenféle hibaüzenet nélkül.
Az isten óvjon minket attól, hogy minden libet kézzel keljen újra behúzni.
[ Szerkesztve ]
"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."
-
btraven
őstag
Gradle nem azért van hogy segítse a munkát?
Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
Állandóan ezt írja ki.
Mennyivel egyszerűbb volt amikor az ember berakta az összes szükséges lib-et a projektbe aztán soha nem volt több gondja vele.
Itt meg köhög a Gradle, meg persze iszonyat lassú. Mi a problémája? Oldja meg. Ne plusz munkát próbáljon nekem adni. Mi az hogy elavult? Miért nem visszafelé kompatibilis?
Megint egy ingyenes "freeszar".Android Studio meg kiírja hogy új Gradle verzió elérhető, frissítsem.
Minek? Azért hogy még jobban elromoljon?[ Szerkesztve ]
-
btraven
őstag
Én vagyok ennyire lassú vagy a Java? (libgdx)
Csináltam egy új képernyőt ahol egy csapat kiválaszthatja a taktikát a következő meccsre. Na gondoltam pikk-pakk kész lesz.
Erre másfél órát elvacakoltam vele. -
Drizzt
nagyúr
válasz Ablakos #11983 üzenetére
Nem hinném, hogy máshogy kéne fordítani. De nem lehet, hogy valamelyik Java verzióban változott a viselkedés? Melyik verzióval fordítasz? Ki tudsz próbálni másikat is?
Rövid utánanézés után mintha a Java 11-ben lett volna ezzel kapcsolatos módosítás? Hányas Java OCP-t nézel és milyen JDK-val fordítasz?
[ Szerkesztve ]
I am having fun staying poor.
-
Ablakos
őstag
Az OCP jó megoldása szerint a következő forrásra két byte kód generálódik
(Book.class and Book$BookReader.class):public class Book {
private int pageNumber;
private class BookReader {
public int getPage() {
return pageNumber;
}
}
}
Kipróbáltam, de nekem csak a Book.class keletkezik eclipse buildre ( vagy javac cli-ben). Valamit félreértek vagy máshogy kell fordítani ezt a kódot? -
artiny
őstag
oldalon valaki tanult mar Javat ,velemenyek, tapasztalatok, sikerult elvegezni az egeszet,milyen eredmennyel ?
-
Steve_Brown
senior tag
7 órányi szenvedés után derült ki, hogy nem a javax-os persistence volt beimportálva hanem a jakartás és azt nem látta a Spring.
Legközelebb felrakom githubra hogy elérjétek
-
Drizzt
nagyúr
válasz Steve_Brown #11978 üzenetére
Valahova nem tudod felrakni maven, vagy gradle projektként, hogy próbálkozhassunk vele?
I am having fun staying poor.
-
Szmeby
tag
válasz Steve_Brown #11978 üzenetére
Tippre azt mondanam, hianyos a spring konfiguraciod, a package scan-ek kozott nezelodnek, hiszen egy annotacio egy bizonyos dolgot konfigural, egy masik meg egy masikat.
De ha nem kotott a package struktura - marpedig miert is lenne kotott egy furcsa package struktura -, en inkabb athelyeznem az Application classt egy application root package-be, ami szerintem nalad a travel package (app nelkul), as akkor megsporolhatod az osszes package scant vegzo annotaciot, nem kell terjengos felsorolasokat irogatni annotaciokba, leven a spring automatikusan scanneli maganak az osszes package-et, amit "beljebb" talal, a peldam szerint a travel.* -ot. Igy nem kell azon filozni, vajon melyik package hianyzik es melyik annotaciobol...
-
Steve_Brown
senior tag
Sziasztok!
Van egy házi feladatom amiben nem tudok dűlőre jutni. JPARepositoryt kéne használnom. Van egy Application osztályom, ezt indítja el a Spring. Van egy SQLDataStore osztályom, ez fogná össze a származtatott JPARepository interface-ket. Nyilván a kettő közt elhelyezkedik egy TravelService osztály is.Egy rakat hibát dob a Spring és mindegyik arra panaszkodik, hogy az egyik típusom nem menedzselt típus."Not a managed type: class travel.domain.Destination" és ezért nem tudja kielégíteni a spring a függőségeket az Autowire-höz. Csatoltam képeket, könyörgöm valaki segítsen!
[kép] [kép] [kép] [kép] [kép] -
Ablakos
őstag
válasz BigBlackDog #11975 üzenetére
Nagy Gusztáv ingyenes pdf-je.
Nekem tetszett a finn egyetem ingyenes kurzusa. -
BigBlackDog
veterán
Sziasztok!
Kezdőknek milyen Java tutorial, vagy anyag javasolt? Nem teljesen járatlan az informatikában és fejlesztésben a célközönség, de objektum orientált témakörben nem igazán tapasztalt.
-
btraven
őstag
Hogy kell megadni hogy linuxon menjen a program? Adott könyvtárban van minden fájl.
windows-on:
java -cp "*" pro.Main -
btraven
őstag
Most komolyan kell csinálnom egy dummy metódust: ilyenkorNemKellMeghivniMertTobbGLSceneVan();
?
Mert nem írhatok kommentet?
Nem terheli ez a rendszert feleslegesen?
Nem az ilyenek miatt van hogy a népszámlálás meg különböző bankok rendszerei is összeomlanak egy kisebb terhelés alatt? -
btraven
őstag
Le vagyunk sajnálva. Nem volt Java programozó opció a népszavazáson.
-
#70211840
törölt tag
Sziasztok.
Mivel szokás mostanság SystemGUI (Windows, Linux) felületet csinálni saját project létrehozásánál?
Form-ok lennének, listák, log megjelenítése, ilyesmi. Illetve 1-1 kép bizonyos ablakokban a kiválasztott elemről. -
Sirpi
senior tag
válasz Ablakos #11968 üzenetére
Nem tudod. Ha mindenképp ilyet szeretnél, akkor a double helyett használhatsz AtomicDouble-t. A lényeg, hogy minden, a lambdán belül használt, de kint definiált változó effectively final kell hogy legyen.
Hazudnék, ha cáfolnám annak tagadását, hogy ez az ital nem nélkülözi a koffeinmentesség megnemlétének hiányát. Na most akkor van benne koffein, vagy nincs?!
-
Ablakos
őstag
(javafx)
A Scene eseménykezelőben, hogy tudom írni a lambda kif. kívüli változókat?double shipAngle = ship.getRotate();
scene.setOnKeyPressed(event -> {
if (event.getCode() == KeyCode.LEFT) {
shipAngle +=-10;
//ship.setRotate(shipAngle);
}
if (event.getCode() == KeyCode.RIGHT) {
ship.setRotate(10);
}
});
-
togvau
senior tag
Van egy Item class, és egy Price class. Az Item-hez tartozhat sok Price, amik pedig 1 itemhez vannak kötve, de a hibernate azért is generál hozzá egy kapcsolótáblát, pedig szükségtelen. Miért?
Ilyen a kapcsolat a két osztályban:
Item:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "item", orphanRemoval = true)
private Set<Price> prices;
Price:@ManyToOne(fetch = FetchType.LAZY)
private Item item;Próbáltam @JoinColumn-al is, akkor is ugyan az. Egy netes példában is pont így csinálta, és mind2 megelőzte a kapcsolótáblázást, de nekem nem.
hitler, sztálin, micro usb
-
Ablakos
őstag
A java.util alatt van Dictionary osztály.
Ha perverz módon saját Dictionary osztály készítek, akkor hogy tudom leírni, hogy ez a Dictionary az én általam készített legyen, ne a beépített?public class InputView {
private Dictionary dictionary;
public InputView(Dictionary dictionary) {
this.dictionary = dictionary;
}
Inkompatibilis típus miatt jogosan nem fordul le.
@Override
public void start(Stage stage) throws Exception {
InputView inputView = new InputView(dictionary);
[ Szerkesztve ]
-
Ablakos
őstag
Kicsit belezavarodtam, hogy is kell megfogni az elemeket a következő tömbben. Szeretnék egy stream-es kiíratást. (egy sor egy tömbelem, kiírva a list akármennyi osztály elemét)
A Pair-nek van toStringje.private List<Pair<K, V>>[] values;
-
BE4GLE
aktív tag
válasz Foglalt név #11958 üzenetére
Én ugyan mobil fejlesztő vagyok, de az a tapasztalatom, hogy az öröklődéssel szemben sokszor ésszerűbb kompozíciót használni. Nem tudom, hogy ez segít-e, de talán ötletet ad ahhoz, hogy másként közelítsd meg a problémát. Persze miután Google-öztél egy picit a témában.
Redmi Note 9 Pro
-
Foglalt név
addikt
válasz Drizzt #11945 üzenetére
Ettől féltem. (Próbálok többek, több kérdésére is választ adni, nem csak neked.)
Amin dolgozom, az egy céges JAVA backend library. A valós feladat, hogy az ügyfél listákat tudjon létrehozni egy adott parent-child business object-ből (listánként vagy csak az egyik, vagy csak a másik). A listáknak azonban különböző saját tulajdonságaik lehetnek (jó lenne ha dinamikusan lehetne őket kreálni és nem kéne folyton a CD-t dolgoztatni), sőt maguk a kapcsolatok is változó változókkal bírnak. Tehát egy BO többször is szerepelhet a listában, ha a kapcsolatnak mások a paraméterei.
Az egyszerűen menne, hogy lepéldányosítok egy közös interfészt, de az nem oldja meg, hogy minden új típusú listára új osztályt kéne csinálnom. Ha csinálok egy lista osztályt és abba dobok egy "tömböt" a plusz paraméterekről, akkor viszont azokat folyton cast-olnom kellene. Ezért gondoltam, hogy inkább csinálok ahhoz is egy marker interfészt, plusz bele az említett függvényt a lehetséges értékekkel és akkor a kliens oldalon nulla tudással lehet kezelni a dolgot.
A backend-nél arra gondoltam, hogy ha foreign key-t szeretnék a különböző paraméterekre, akkor az macerásabb. Listatípusonként tudok csinálni egy táblát, a típusleíróba meg beírom a hozzátartozó tábla nevét, de kicsit mókolásnak érzem.
De bármennyire is keresek, nem találok rá elegáns megoldást. -
BE4GLE
aktív tag
Igazából ezt úgyis megpróbálhatod, hogy csinálsz stream-et, amire egy windows-os kliens feliratkozik. Ez amolyan push gateway lenne. Beállíthatod, hogy automatikusan induljon windows boot-nál. Ez a kliens jelzi a szerver app felé, hogy jelen van, ha csatlakozott az ottani hálózatra. Ergo a közelben van. Annyit kell még megoldani, hogy ledobáld azokat, akik nincsenek már jelen.
A szervernek nem kell androidos eszköznek lennie. Elég, ha van egy endpoint, amin lehet üzetet küldeni a feliratkozóknak. Az üzenet küldés android oldalon pedig csak simán ennek a végpontnak a meghívása lenne.
[ Szerkesztve ]
Redmi Note 9 Pro
-
coco2
őstag
válasz BE4GLE #11952 üzenetére
Kicsit a logisztikával vagyok bajban, ha piconetet használnék. Ami esetet írsz, vélhetően egy helyi windows-os gép volt a piconet központ, és amikor beérkezett egy új android a hatósugárba, már tudta, melyik piconet-het csatlakozzon, csatlakozott, és jelezte, hogy érkezik az ember. Ha rosszul sejtem, javíts ki.
Ha egy kliens piconet-hez csatlakozik, egyszerre csak egy központhoz csatlakozhat. Oda küldheti el az üzenetet. Aztán kotorásznia kell a többi beacon után, csatlakozni oda, és küldeni üzenetet újra. Kicsit hasonló szitu, mint amikor vonalas LAN-on letiltják a multicast csomagokat, és következésképp ha küldeni akarsz egy multicast-ot, fel kell deríteni az összes állomást, és egyesével elküldeni a csomagokat. Mindazt a temérdek sok kommunikációt végezni el ahelyett, hogy csak kiküldenél egy szem multicast csomagot, és aki kapta, kapta, aki nem, az nem. Vonalas LAN-on még letojnám az esetet, mert úgyis hálózatról megy minden, van energia. Mobil telefon esetében akkumulátor van véges kapacitással.
Nem jobb a helyzet akkor sem, ha a mobil telefon a beacon. A beacon-nek állandóan üzemben kell lennie ahelyett, hogy mondjuk időzített job jelleggel 5 percenként egyszer feléled, kidob egy üzenetet a környezetének, aki kapta, kapta, aki nem, az nem, ignore, és alkalmazás lepihen újra. Beacon esetében nincsen pihi. Akku kajálás van helyette.
Szóval ez a bajom a piconet-tel, és ezért akarok inkább broadcast send-et.
Ha az nem létezik, még kiegészítőként azon gondolkodok el, hogy windows-on be lehet-e állítani low energy beacon-t, és az korlátozná a hatósugarat. Lehetségesen csak korlátos számú master lehet a környezetben egy adott időpillanatban. Viszont az eddigiekben nem találtam arra módot, hogy piconet-hez csatlakozó kliens hogyan kérdezheti meg a master-től az adási energia szintet. Ha megkérdezheti, az még mindig kommunikáció minden master felé, amit a master nem biztos, hogy venni fog, mert míg a master ad 100 mW-on, a slave 1 mW-on, a slave megkapja az üzenetet, a master nem, és kivárási idő telik el minden alkalommal, mire kiderül, hogy "az a hálózat messze van". Nem csak az én beacon-jeim lehetnek ott, de ezernyi másik ugyan úgy. Ha lehetne azt párhuzamosan, minden létező beacon-höz egyszerre csatlakozni, talán megpróbálnám, de ahogy olvasgattam, arra nincsen támogatás, csak egyik a másik után, és úgy a szükséges idő már nem korlátos.
[ Szerkesztve ]
កុំភ្លេចប្រើភាសាអង់គ្លេសក្នុងបរិយាកាសអន្តរជាតិ។
-
Ablakos
őstag
Szeretnék egy Map<String,String> objektumot visszaadni úgy, hogy ne legyen benne key-value duplikáció.
Pontosabban a key-value ne legyen inverzen sem dupla.i.e
tietokone:computer vagy computer:tietokone mindegy, de csak egyféleképpen kerüljön vissza.Próbáltam az eredeti mapet és az inverz map-et összefűzni és ebből a halmazból csak a putIfAbsent megy vissza, de lehet van ettől jobb megoldás.
[ Szerkesztve ]
-
BE4GLE
aktív tag
Ez így inkább beacon-nek hangzik. Többnyire marketing kommunkiációhoz használják. Én a második linken található library-t használtam is néhány éve. Bár az a prokekt pont nem marketing célú volt. Elhelyeztünk ilyen beacon-öket a cég épületében, és így lehetett tudni, ha valaki megérkezett az irodába.
[ Szerkesztve ]
Redmi Note 9 Pro
-
coco2
őstag
válasz BE4GLE #11950 üzenetére
Nem akarok piconetet, nem akarok semmi kapcsolódást. Publikus információt akarok kiküldeni bármilyen vevőnek, ami éppen akkor éppen ott van vagy nincs. A többi eszköz tervezetten windows-os lesz, de annak nem kellene számítson, ha nem barkácsolok át szabványos alapokat.
A fenti linken olyan sok mappa van mappa hátán, hogy még keresem a levesben a húst, hogy a saját függvények rétegei alatt végül mit használ
[ Szerkesztve ]
កុំភ្លេចប្រើភាសាអង់គ្លេសក្នុងបរិយាកាសអន្តរជាតិ។
-
coco2
őstag
-
btraven
őstag
válasz Foglalt név #11937 üzenetére
Ezt nem értem miért a java topikba írtad.
De nézzük csak, kell egy oroszlánszelídítő. Artista meg bűvész is lehet. Meg kardnyelő. Bolhacirkusz.
Bohóc viszont mindenképpen kell, akár kettő is. -
BE4GLE
aktív tag
válasz Foglalt név #11937 üzenetére
Az OOP-vel könnyű átesni a ló túloldalára és túlkomplikálni egy egyszerű problémát. Pl. ha a kenguru el tud rejteni valamit azt lehet simán relációs adatszerkezetként is értelmezni. X elrjeti Y-t. Ez akár tárolható egy táblában is. A kengurunak nincs szüksége "elrejt" metódusra. Az lehet egy tőle független metódus. Az ugrás szintén egyszerű. Hiszen olyankor mozgatod és animálod az állat objektumot. Nem feltétlenül kell tudnia magáról, hogy ő képes e ugrani. Az ugrás metódus majd eldönti, hogy az adott faj képes e rá. Mozgatja és keres hozzá egy animációt, ha van. Ez mind megoldható faj azonosítóval. Nem kell instanceof. Próbáld az adatszerlezeteidet minél egyszerűbre írni. Egy állat nagyon sok mindenre képes. Hatalmas osztályaid lesznek, kismillió őssel, ha ilyen szemléletben tervezed őket. És az végül mindig visszaüt.
[ Szerkesztve ]
Redmi Note 9 Pro
-
Drizzt
nagyúr
válasz Foglalt név #11940 üzenetére
Szabadni szabad, de nem tul szep. Interface moge viselkedest illik rejteni, igy pl. azt, hogy miket tudnak csinalni az allatok, szivesen kiszerveznem interface-be, de azt, hogy milyen tulajdonsagai vannak az allatoknak, inkabb nem.
A backend dolgot nem tudom itt hogyan erted.I am having fun staying poor.
-
coco2
őstag
Sziasztok!
Android telefonra keresek példát BT broadcast üzenetet küldeni.
A tippeket köszönöm.
កុំភ្លេចប្រើភាសាអង់គ្លេសក្នុងបរិយាកាសអន្តរជាតិ។
-
Foglalt név
addikt
válasz Foglalt név #11940 üzenetére
Belegondoltam és a változóknál bejön egy új aspektus, a backend.
-
BE4GLE
aktív tag
válasz Foglalt név #11937 üzenetére
Szerintem az insteanceof önmagában még nem code smell. Kotlinban sem code smell az is operator. Sőt, ha használod, még smart cast-olja is az objektumot. A java azért más picit, mert ott neked kell cast-olni. Inkább azt mondanám, hogy könnyű code smell-t csinálni vele javaban. Például figyelni kell, hogy csakis final pointerre hívd meg, mert hiába csekkolod, hogy instanceof ha később változhat az object amire a pointer mutat.
Redmi Note 9 Pro
-
Foglalt név
addikt
válasz Drizzt #11939 üzenetére
Ráadásul ugyanezt meg tudom változókkal is csinálni, ugye?. Csinálok egy marker interface-t(AnimalAttribute), amihez hozzádobok esetleg egy getPossibleValues()-t és legrosszabb esetben kap az adott class egy wrapper-t. Így akár egy dinamikus listát is tudok csinálni, ahol a tigriseknek lesz Csíkvastagsága a kengurunak meg Erszénynyúlásiegyütthatója.
"Szabad" ilyet? -
Drizzt
nagyúr
válasz Foglalt név #11937 üzenetére
Tobbfele megoldas lehet, de talan a legegyszerubb az, ha csinalsz egy Activity osztalyt, ami leirja, hogy mit es hogyan tud csinalni az az Activity.
Az allat osztalyban meg eltarolsz egy Activity Collection-t, amire csinalsz egy getter-t.
Aztan az Activity-bol csinalhatsz mondjuk egy KangarooHidingActivity-t, ami a konstruktoraban megkap egy Kangaroo-t. A Kangaroo konstruktoraban meg megcsinalod a KangarooHidingActivity-t, meg a masikat es belerakod oket egy collection-be.
Igy amikor vegigmesz egy Animal Collection-on, le tudod kerni az egyes Activity-k kollekciojat allatoktol fuggetlenul, azok az Activity-k meg megis kepesek lesznek allat specifikus dolgokat csinalni, az eppen megadott allaton.
Azt nem tudom, hogy ez egy ismert pattern-e, meg van-e neve, de egyszeru esetben valami ilyesmit csinalnek. A Command pattern nagyjabol ez, de talan nem pontosan.[ Szerkesztve ]
I am having fun staying poor.
-
floatr
veterán
válasz yossarian14 #11927 üzenetére
Már van, de a java 8ról beszéltem a példa kedvéért, abban még nem volt.
-
Foglalt név
addikt
Nem teljesen java, inkább OOP kérdés, amiben kicsit elveszve érzem magam.
Vannak állataink, legyen mondjuk kenguru és tigris. Szeretnénk építeni egy cirkuszt, több ilyen állattal.
A cirkusz igazgató le tud hívni egy állatlistát, amiben látja mindkét fajt és az adataikat, pl. születési év. Illetve ha kiválaszt egyet, akkor utasítást adhat pl. egy gombbal. Mindkét állat tud a farkán ugrálni, viszont a kenguru el is tud rejteni valamit az erszényében.
A problémám, hogy sokak szerint egy instanceof mindig code smell. Akár leszármazást, akár kompozíciót használok, valahogy meg kell tudnom a lista egy adott elméről, hogy milyen többlet képessége.
Hogyan lehet ezt szépen megoldani?
Illetve lehet-e dinamikussá tenni az egészet, hogy kódváltoztatás nélkül új fajokat kreáljon az igazgató, amik saját "képességekkel" rendelkeznek? -
BE4GLE
aktív tag
válasz Gyuri16 #11935 üzenetére
Azt a kotlin extension-ök sem állítják, hogy a listOf(...) eredménye immutable. Szóval nekem tökéletesen megfelel a kotlinos elnevezés. És annak legaláb egy olyan List a visszatérési értéke, aminek nincs add metódusa, ami aztán random RuntimeException-t dobál, mint a javas alternatívák. De abban egyetértünk, hogy lista elemeinek is immutable-nek kell lenniük.
[ Szerkesztve ]
Redmi Note 9 Pro
-
Gyuri16
senior tag
válasz fatal` #11934 üzenetére
"An unmodifiable collection is not necessarily immutable. If the contained elements are mutable, the entire collection is clearly mutable, even though it might be unmodifiable. For example, consider two unmodifiable lists containing mutable elements. The result of calling list1.equals(list2) might differ from one call to the next if the elements had been mutated, even though both lists are unmodifiable. However, if an unmodifiable collection contains all immutable elements, it can be considered effectively immutable. "
Nem vagyok egoista, csak uborkagyalu!
-
BE4GLE
aktív tag
válasz Gyuri16 #11931 üzenetére
Android vonalon én java 8-nál tetőztem. Kotlinban ez pl. így működik:
listOf(...) és mapOf(...) ha final kell és
mutableListOf(...) és mutableMapOf(...) ha mutable kellAz List.of szintén List típust add vissza, csak gondolom dob egy csinos UnsupportedOperationException-t ha add-ot hívsz az outputra.
Redmi Note 9 Pro
-
BE4GLE
aktív tag
válasz Ablakos #11924 üzenetére
Annyit tennék, még hozzá, hogy az ArrayList mutable. A projektekben az ilyen típusú visszatérési értékek kerülendők. A HashMap is ilyen. Ezeket inkább csak függvények és osztályok belső logikájához használd. Visszatérési értéknek mindig próbálj immutable-t használni, mint a List vagy a Map. Azt gondolom észrevetted, hogy az interface típusokban nincs add és put. Okkal.
Redmi Note 9 Pro
-
Sirpi
senior tag
válasz floatr #11925 üzenetére
És amennyiben nincs is szükséged, hogy elérd ezeket a metódusokat, mindig az interface-t használd típusnak, ne a konkrét megvalósítást, mert így bármikor ki tudod cserélni a tényleges típust (pl. LinkedList-re) anélkül, hogy a kódod egyéb részeihez hozzá kellene nyúlnod.
Hazudnék, ha cáfolnám annak tagadását, hogy ez az ital nem nélkülözi a koffeinmentesség megnemlétének hiányát. Na most akkor van benne koffein, vagy nincs?!
-
Ablakos
őstag
Volt már hasonló kérdésem saját osztállyal. (ősosztály metódus elérés, override)
Azt még mindig nem értem, hogy beépített osztályoknál mi a különbség a list1-list2 között, ha az egyiket List-be a másikat ArrayList típusba teszem. (ez a kérdés akár a Map/HahMap -re vonatkozhatna)
List<String> list1 = new ArrayList<String>();
ArrayList<String> list2 = new ArrayList<String>();
-
-
Szmeby
tag
Még egy kis kiegészítés a comparator implementációhoz.
Ha nagyon nagy számokkal dolozunk, akkor nem szerencsés a kivonásos módszer használata, pl. ap1.getLiteracyRate() - p2.getLiteracyRate()
. Ugyanis ha egy nagyon negatív számból kivonunk egy nagyon pozitív számot, akkor az eredmény túlcsordulhat és átcsap az ellenkező előjelbe, ami nyilván elrontja az egész sorrendezést.
Érdemes inkább a relációs operátorokat (<, >) használni a kivonás helyett. -
floatr
veterán
válasz yossarian14 #11919 üzenetére
Igaz. Ezeket mindig elfelejtem, pedig nem hülyeség
-
floatr
veterán
válasz Ablakos #11914 üzenetére
Metódus-referenciát akartam írni, de elbabráltam.
Ha a Literacy osztályban implementálsz egy static compare metódust a Double::compare mintájára (ahogy a lambdában csináltad), akkor úgy is lehetne a streames kód, hogy:.sorted(Literacy::compare)
Rövidebb nem lesz összességében, de elegánsabb, és nálam egy kód reviewn is hamarabb átmegy
[ Szerkesztve ]
-
BE4GLE
aktív tag
válasz Ablakos #11910 üzenetére
Egy kis magyarázat: A comparator mindig int visszatérési értékű. Az érték előjele mutatja meg, hogy merre néz a kacsacsőr. Ha nem primívet használsz, akkor az object rendelkezik egy compareTo metódussal aminek int a visszatérési értéke. Szóval ha double helyett Double lenne a property, akkor hívhatnád így is. p1.compareTo(p2). Vagy ha ez az egyetlen property akkor akár comparator nélkül is mehet: sorted()
Redmi Note 9 Pro
-
Ablakos
őstag
Elakadtam a következő stream soron:
ArrayList<Literacy> list = new ArrayList<>();
try {
Scanner scanner = new Scanner(Paths.get("literacy.csv"));
while (scanner.hasNextLine()) {
String[] line = scanner.nextLine().trim().split(",");
list.add(new Literacy(line[0],line[1],line[2],line[3],Integer.valueOf(line[4]),Double.valueOf(line[5])));
}
} catch (IOException ex) {
System.out.println(ex);
}
list.stream()
.sorted((p1, p2) -> {return p1.getLiteracyRate() - p2.getLiteracyRate();})
.forEach(l -> System.out.println(l));
A fordítási hibaüzenet: incompatible types: bad return type in lambda expression
possible lossy conversion from double to int
ALiteracy
osztályban agetLiteracyRate
double típus.Nem értem mi a baja két double kivonásával és visszaadásával? (int-el működne, de nem az a feladat)
-
Sirpi
senior tag
válasz Ablakos #11908 üzenetére
Alapból a stream-nek van minimális overhead-je a hagyományos bejárással szemben, viszont sokkal jobban karbantartható kódot eredményez.
Másrészt ha nagyon heavy a stream kiértékelése (pl. sokmilliós rekordszám), akkor a .parallel() lépést beiktatva a stream-be párhuzamosítja a feldolgozást, és magszám-közeli szorzót lehet így elérni sebességben.Hazudnék, ha cáfolnám annak tagadását, hogy ez az ital nem nélkülözi a koffeinmentesség megnemlétének hiányát. Na most akkor van benne koffein, vagy nincs?!
-
Ablakos
őstag
Megismerkedtem a "stream" technikával. Nagyon tetszik tizen- sorok helyett egy utasításba lefűzni a kódot.
A kérdésem, hogy ez a tömörség csak a forráskódot érinti, vagy a lefordult
bájtkód/végrehajtási sebességet is gyorsítja?
(Biztos össze lehet hasonlítani méréssel, de nem akarom feltalálni a kereket. ) -
Ablakos
őstag
Köszönöm mindenkinek. Teljesen fordítva gondoltam az .anyMatch kiértékelést. Addig megy amíg igaz nem lesz a kiértékelése
[ Szerkesztve ]
-
Sirpi
senior tag
válasz Ablakos #11903 üzenetére
A stream-et egy iterátorként fogd fel, és a benne lévő lépések végrehajtódnak minden elemre.
Tehát minden elemre végre fog hajtódni először az upperCase, ami nagybetűsít. Ennek az eredménye megy át elemenként az anyMatch-be, ami megnézi, hogy az adott elem A betűvel kezdődik-e. Az anyMatch egy terminal operátor, vagyis zárja a stream-et, további lépést nem tudsz hozzáfűzni. A visszatérési értéke boolean:boolean anyMatch(Predicate<? super T> predicate)
Tehát az egész stream kiértékelés eredménye egy true/false érték, és true akkor, ha valamelyik elem nagybetűsítve A-val kezdődik. Az első sor elejére ezt is írhatod:
boolean existsWithA = Stream.of("d2", "a2", "b1", "b3", "c")...
És jelen esetben ez true-t fog visszaadni, de ha az a2-t kiszeded, akkor false-t.
Hazudnék, ha cáfolnám annak tagadását, hogy ez az ital nem nélkülözi a koffeinmentesség megnemlétének hiányát. Na most akkor van benne koffein, vagy nincs?!
-
Drizzt
nagyúr
válasz Ablakos #11903 üzenetére
anyMatch egy Predicate-et vár. A Predicate egy olyan függvény, ami valamilyen bemenetre egy booleanüt ad vissza.
Az anyMatch addig folytatja a kiértékelést, amíg a predicate igaz nem lesz. Tehát jelen esetben addig, amíg nem talál olyan elemet, ami nagy A-val kezdődik. Utána leáll a további feldolgozás, mert teljesen felesleges lenne.I am having fun staying poor.
-
Ablakos
őstag
Egy kis stream alap...
A végrehajtásban a .map upperCase -ként fűzi, adja tovább a stream elemet. Ez eddig érthető(számomra). Az .anyMatch -nél nem értem, hogy a kiértékelt boolean eredmény mit jelent. A következő stream ciklusban megint az eredeti következő stream elem lesz manipulálva.
Hogy is van ez?Stream.of("d2", "a2", "b1", "b3", "c")
.map(s -> {
System.out.println("map: " + s);
return s.toUpperCase();
})
.anyMatch(s -> {
System.out.println("anyMatch: " + s);
return s.startsWith("A");
});
// map: d2
// anyMatch: D2
// map: a2
// anyMatch: A2
Új hozzászólás Aktív témák
Hirdetés
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
Állásajánlatok
Cég: Axon Labs Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest