Tuesday, 20 January 2015

Java8 Lambdas Tip - Collect SortedGroupingBy

Java8 introduces a great new feature which easily allows your code to decompose a List of objects into a Map of Lists of objects keyed on a particular attribute.

This is best shown by example.
Let's say you have a list of Books as below:


public class Book{
    String author;
    Date published;
    int copiesSold;
    String catagory;

    public String getAuthor() {
        return author;
    }

    public Date getPublished() {
        return published;
    }

    public int getCopiesSold() {
        return copiesSold;
    }

    public String getCatagory() {
        return catagory;
    }
}

To group them into a map of authors to books used to be a little bit painful but is now a one liner!

Map<String, List<Book>> authorsToBooks = books
       .stream()
       .collect(Collectors.groupingBy(Book::getAuthor));

The only problem with this that you might have is that the default Map implementation returned is a HashMap which of course is unordered and you might well want to order by the key, in this example by the author.  Of course, you could always sort the Map in a second step but there's a way to do it in one line.

To fix that let's introduce this static utility function:

public static <T, K extends Comparable<K>> Collector<T, ?, TreeMap<K, List<T>>> 
   sortedGroupingBy(Function<T, K> function) {
        return Collectors.groupingBy(function, 
           TreeMap::new, Collectors.toList());
}

We can call it like this:

Map<String, List<Book>> authorsToBooks = books
       .stream()
       .collect(sortedGroupingBy(Book::getAuthor));

This time the map implementation is a TreeMap which has returned the Map of authors to their books in alphabetical order. 

29 comments:

  1. Thanks for your informative post on Java application development. This open source platform assists software developers to create stunning mobile application with ease. Further, they can make use of this platform at free of cost.JAVA Training|Java Courses in Chennai

    ReplyDelete
  2. I have read your blog its very Interesting. Thanks for sharing. ERP Providers in Chennai | ERP Software Company Chennai. We provide best quality cost effective ERP software applications and end to end enterprise solutions to all the industry verticals with the affordable cost.

    ReplyDelete
  3. Thank you for this valuable information. I have got some important suggestions from it. Get your business to the next level in simple steps.
    ERP Solutions in Chennai | ERP Software Solutions in Chennai.

    ReplyDelete

  4. The website is looking bit flashy and it catches the visitors eyes. A design is pretty simple .
    regionale stellenbörse

    ReplyDelete

  5. Thanks for sharing the predictions on Is very Useful Thanks for sharing the post looking forward for more posts.http://www.chloros.in/customized-erp-solutions.html

    ReplyDelete
  6. SEM SERVICES
    I am fully satisfied with the information you have posted. Good job. Keep posting:)
    CUSTOMIZED ERP SOLUTIONS

    ReplyDelete
  7. PG SLOT มีเกมหลากหลายให ้เลือก พรอ้ มกราฟฟิกแอนนเิมชนั่ สวยงามทสี่ ดุ ในยคุ นี้แจ็คพอตแตกง่าย pgslot โปรโมชนั่ พเิศษส าหรับทงั้สมาชก เกา่ และสมาชกิ ใหม่ ระบบฝาก-ถอนเงินออโต ้เงินเข ้าเร็วทันใจมีแอดมิ ดูแลตลอด 24 ชวั่ โมง ต ้องที่ pgslot.bid มั่นคงจ่ายจริง ไม่ว่าคุณจะถอนเงิ มากมายเท่าไหร่ ทางเว็บจ่ายเต็มไม่มีหัก pgslot ปั่นง่ายแตกง่าย ทางเขา pg slot

    PG SLOT ผู ้ให ้บริการเว็บตรง ที่แตกง่ายที่สุด ปั่นสนุก ฝากเงินรับเครดิตฟร สูงสุด 15000 บาท สมัคร พีจีสล็อต หรือ PGSLOT กับเราเพื่อความมั่นคงของคุณเอง.

    ReplyDelete
  8. คุ้มค่ากับการลงทุน ทั้งสนุกทั้งได้เงิน ร่วมผจญภัยไปกับเราได้แล้วที่เว็บไซต์ SLOT PG เว็บไซต์ที่จะเติมเต็มให้ฝันทางการเงินให้เป็นจริงด้วยการเล่นเกมออนไลน์หลากหลายรูปแบบที่เราเปิดให้บริการ ทุกเกมมาพร้อมกับการสร้างเกมและออกแบบมาเป็นอย่างดี พบกับฟีเจอร์ดีๆ และของขวัญมากมายภายในเกม อีกทั้งยังมีบริการ Bonus Cash Back บริการคืนยอดเสียรับโบนัส 10 เปอร์เซ็นต์

    ReplyDelete
  9. รับเงินกันแบบง่ายๆ สำหรับใครที่สนใจหารายได้พิเศษเชิญทางนี้คลิกมาเลยที่เว็บไซต์ PG SLOT เว็บไซต์ยอดนิยมอันดับหนึ่งในประเทศไทยที่มาพร้อมกับเกมออนไลน์ทุกรูปแบบมาให้นักเดิมพันได้เลือกเล่นกันได้แบบไม่มีเบื่อ ตัวเกมสามารถรองรับการเล่นผ่าน Computer PC HTML5 MacOS รวมไปถึงมือถือสมาร์ทโฟนทุกรุ่นทุกระบบปฏิบัติการทั้งระบบของแอนดรอยด์และ iOS

    ReplyDelete
  10. จะสมัครแล้วเล่นเอง หรือใจดีแนะนำเพื่อน รับไปเลยโปรโมชั่นจากเรา MEGA GAME เว็บไซต์เกมสล็อตออนไลน์ มีทั้งโปรโมชั่นสมาชิกใหม่และโปรโมชั่นแนะนำเพื่อน และสิทธิ์ประโยชน์อื่นๆ อีกมากมมายจากเรา megagame.ai เปิดโอกาสให้ทุกท่านได้มีส่วนร่วมไปกับเรา เลือกเล่นเกมสล็อตภายในเว็บไซต์ก็มีสิทธิ์ลุ้นเป็นเจ้าของแจ็คพอตก้อนโตได้ทันที

    ReplyDelete
  11. We believe in providing a top-quality digital marketing agency in Jacksonville, FL, businesses can trust with their digital growth. You can get the most out digital marketing agency jacksonville

    ReplyDelete
  12. เครดิตฟรีที่สามารถผู้เล่นสามารถกดรับเอง มาพร้อมกับโปรโมชั่นล่าสุด 2022 Ambbet เเจกหนักไม่มีกั๊ก คลิกดูข้อมูลเพิ่มเติม เปิดยูสใหม่กับ Ambbet เริ่มต้นเพียง 50 บาทเท่านั้น โบนัสฟรี 100% เชิญเพื่อนรับเพิ่ม 100 เเละโปรโมชั่นอื่นๆอีกมากมาย ที่ให้ผู้ล่นเลือกรับได้เองหลังจากเติมเงินผ่านธนาคาร หรือ วอเลท(TrueMoney Wallet) ไม่ยุ่งยาก ซับซ้อนรวดเร็วไม่เสียเวลา.

    ReplyDelete
  13. And the basic idea is that you need to beat the dealer by getting your cards as close to 21 as possible without a pass. สล็อตเว็บตรง

    ReplyDelete
  14. Pgslot ค่ายเกมที่เหมาะสมที่สุด ได้รับเกียรติศักดิ์ที่ดังเป็นชั้น 1
    Pgslot ที่เป็นเกมจากเว็บไซต์พนันออนไลน์อย่างเว็บไซต์ pgking789.com และก็ได้รับความโด่งดังว่าเป็นเว็บไซต์ที่มีมาตรฐานที่เยี่ยมที่สุด เป็นเว็บไซต์สมาชิกใหม่มาแรงอย่างยิ่ง เพราะเหตุว่าปัจจุบันนี้ได้มี การรวบรวมนำเกมพนันออนไลน์ต่างๆมากมายเอาไว้ในระบบ pgslot ซึ่งตอบปัญหาสำหรับนักการพนันแบบใหม่อย่างดีเยี่ยม แล้วก็มีบริการครบวงจนถึงที่จะรอให้ ความสบายแก่สมาชิกทุกท่าน เพราะฉะนั้นถ้าผู้ใดที่กำลังจะมองหาเว็บไซต์ที่ต้องการจะลงทุนขอชี้แนะ เว็บนี้ที่จะสามารถต่อยอดเงินลงทุน ให้กับคุณแปลงเป็นเงินโตได้อย่างง่ายดายจะเป็นยังไงบ้างไปติดตามมองกันได้เลย

    คุณควรจะเริ่มทำความรู้จักกับค่ายเกม Pgslot ค่ายเกมใหม่
    เว็บไซต์ pgking789.com เป็นเว็บไซต์สมาชิกใหม่ที่พึ่งจะทำเปิดตัวอย่างเต็มเปี่ยมเมื่อไม่นาน ซึ่งมีการเก็บรวบรวมเกมพนันต่างๆจากทั่วบ่อนคาสิโนออนไลน์ ไม่ว่าจะเป็น สล็อตออนไลน์ ไฮโล รูเล็ต ป๊อกกระดอน บาคาร่า แล้วก็เกมพนันฯลฯ ฯลฯ โดยเกมต่างๆที่กล่าวมาสามารถทำรายได้ให้กับนักเสี่ยงดวงอย่างดีเยี่ยม และก็สามารถให้นักเสี่ยงดวงผู้คนจำนวนมากเผชิญติดอยู่มเสร็จจากการมาเล่น Pgslot ได้อย่างดีเยี่ยม
    ถัดมาในเรื่องที่เกี่ยวข้องกับการบริการที่เว็บไซต์ได้มีการมองเห็น และก็นำปัญหาต่างๆมาปรับปรุงจนถึงเปลี่ยนเป็นบริการที่มีคุณภาพ ซึ่งมีการบริการครบวงจรดังนี้

    Pgslot บริการครบวงจรมีอะไรบ้าง
    สำหรับบริการในเว็บไซต์ Pgslot มีการบริการดังต่อไปนี้
    • หนทางการติดต่อข้าราชการ
    • การเปิดให้บริการตลอด 1 วัน
    • ระบบฝากถอนเร็วไว มีแบงค์ให้บริการนานัปการแบงค์
    • มีระบบระเบียบความปลอดภัย รวมทั้งระบบความยั่งยืนมั่นคง
    • โปรโมชั่นมาก

    ต้องการพนันจำเป็นต้องทำเช่นไร?
    ถ้าเกิดคุณอยากพนันกับเว็บไซต์ Pgslot สามารถกระทำการลงทะเบียนเป็นสมาชิกด้วยขั้นตอนกล้วยๆดังนี้
    ขั้นตอนที่ 1
    • ไปสู่หน้าระบบ พีจีสล็อต ให้เป็นระเบียบ
    • ทำสมัครเป็นสมาชิก โดยการกรอกข้อมูลให้เป็นระเบียบเรียบร้อย
    ขั้นตอนที่ 2
    • เพิ่มเครดิตเพื่อเปิดระบบ แล้วก็ใช้สำหรับในการพนันเกมพนันออนไลน์
    • คอยรับรหัสการันตี
    ขั้นตอนที่ 3
    • ภายหลังที่รับรหัสการันตีเป็นระเบียบทำล็อคอินเข้าระบบให้เป็นระเบียบเรียบร้อย
    • เลือกเกมพนันที่อยากพนันตัวอย่างเช่น สล็อตออนไลน์ ฯลฯ
    • เมื่อกระทำพนันชนะระบบจะทำโอนเงินรางวัลไปสู่บัญชีให้เป็นระเบียบ เท่านี้ก็เรียบร้อยสิ้น

    สำหรับเพื่อการลงทะเบียนสมัครสมาชิกเข้ามาคุณก็จะได้รับกับการบริการต่างๆดังที่กล่าวไปข้าวต้นทั้งหมดทั้งปวง พร้อมด้วยโปรโมชั่น หรือสิทธิพิเศษต่างๆอีกเยอะมาก

    ReplyDelete
  15. midnight to 3 o'clock, because it is during the time when people play slots less. or have a small number of players in the system The program therefore randomly draws the lucky winners to come out in a row or the same lucky winner many times more. slot pg

    ReplyDelete
  16. Freshly Steamed Cantonese with different colors and flavors The water droplets spilled out. Wandering through the streets with a delicious aroma Including a fresh scent that encourages the taster to try. make their hands Reach สล็อตเว็บตรง

    ReplyDelete
  17. เว็บแทงบาคาร่าออนไลน์ แทงง่าย รวยไว ไม่ต้องรอหวยออก สมัครสมาชิกกับ เว็บบาคาร่า อันดับ1 อย่าง Sagameherelao เว็บบาคาร่าออนไลน์ที่มีผู้เข้าใช้งานมากที่สุด เข้าเล่นได้ง่าย ๆ เล่นแล้วได้เงินจริง สมัครสมาชิกกับเราวันนี้แจกฟรี โบนัสเครดิตไม่อั้น อยากหาเงินง่าย รวดเร็วทันใจสมัครมาเป็นครอบครัวเดียวกับเราเลย นอกจากนี้เว็บไซต์ของเรายังรองรับทุกระบบการเล่นอีกด้วย ไม่ว่าคุณจะเล่นผ่านสมาร์ทโฟนรุ่นใดระบบใดก็ได้ ก็สามารถเล่น บาคาร่า กับเราได้ฟรีตลอด 24 ชั่วโมง

    ReplyDelete
  18. Just apply for membership to spin slots on the website directly. You will receive a 100% free bonus immediately. We also have promotions and privileges that are guaranteed. That there is no place to pay this much for sure. คาสิโน Auto

    ReplyDelete
  19. เล่น Pg Slot สมจริง กับ ดาฟาเบท ยินดีต้อนรับสู่ Dafabet เว็บพนันออนไลน์ชั้นแนวหน้าของโลก และก็ได้เก็บสินค้าเกมที่ยอดเยี่ยม ดังเช่น พนันกีฬา pg slot คาสิโน ดีลเลอร์สด รวมทั้งเกมออนไลน์

    ReplyDelete
  20. บาคาร่า เครดิตฟรีหาพอดีไหน หาได้ยังไง บาคาร่า พวกเรามีคำตอบ
    บาคาร่า เกมพนันยอดฮิตที่มีหลายเว็บไซต์นำไปให้บริการแก่นักพนัน และก็โดยส่วนมากสุดแท้แต่ละเว็บไซต์จะมีโปรโมชั่นเพื่อสามารถใช้ร่วมกับเกมพนันจำพวกนี้ได้ โดยโปรแต่ละตัวก็จะมีเงื่อนไขที่แตกต่างกันออกไปรวมทั้งแจกเครดิตให้แก่นักพนันแตกต่างกัน การหาเครดิตฟรีก็เลยสามารถหาได้ตามเว็บไซต์คาสิโนออนไลน์ดูเหมือนจะทุกเว็บไซต์นั้นเอง
    แนวทางการรับเครดิตฟรีตามเว็บไซต์พนันออนไลน์
    การขอรับเครดิตฟรีเพื่อนำมาเล่น บาคาร่า ไม่ใช่ว่าจะกดยอมรับได้เลย แต่ว่าจำต้องสมัครเข้ามาเป็นสมาชิกของเว็บไซต์พวกนั้นแล้วก็มีการเพิ่มเครดิตตามข้อกำหนดก่อนเสมอ มีอยู่แค่เพียงบางเว็บไซต์ที่แจกให้เลยโดยที่ยังไม่ต้องเพิ่มเติมเงินเข้า ด้วยเหตุผลดังกล่าวลองมองกันว่าวิธีผู้กระทำดรับเครดิตฟรีจะสามารถทำเป็นยังไง ดังต่อไปนี้
    • ภายหลังสมัครและก็เพิ่มเงินแล้วให้เข้าไปยังหน้าโปรโมชั่นคาสิโน
    • กดเข้ามองข้อแม้ของโปรที่พึงพอใจ
    • กดรับโปรนั้นรวมทั้งรอคอยระบบพิจารณา
    • การขอรับโบนัสต่างๆสามารถกดยอมรับได้ในขั้นตอนเพิ่มเงิน หน้าโปรโมชั่น และก็ทางข้าราชการ
    • เมื่อระบบสำรวจความถูกต้องแน่ใจแล้วจะปรับเครดิตเข้าให้ในทันที
    • นักการพนันควรต้องใช้เครดิตที่ได้มาสำหรับเพื่อการเล่นพนัน
    • แม้ไม่อาจจะทำตามอย่างข้อตกลงในช่วงเวลาที่ระบุได้เครดิตจะถูกดึงคืนในทันที
    เครดิตฟรีสามารถใช้ได้กับเกมจากค่ายไหนบ้าง
    ถ้าคุณเข้าเล่นพนันออนไลน์มาพอเหมาะพอควรแล้ว คุณจะพอเพียงทราบกันดีอยู่แล้วอยู่ว่าในบางโบนัสของเว็บไซต์ต่างๆจะกำหนดไว้เลยว่าสามารถใช้เล่นพนันเกมจากค่ายใดได้บ้าง แม้กระนั้นโดยส่วนมากถ้าหากเป็น บาคาร่า จะสามารถใช้ได้กับ sagaming เป็นหลักหรือบางครั้งก็อาจจะใช้กับเกมในค่ายอื่นได้เพียงแต่บางค่ายเพียงแค่นั้น เนื่องมาจากเกมชนิดนี้จะมีเพียงแค่ไม่กี่ค่ายเพียงแค่นั้นยอดนิยมจากผู้เล่น ด้วยเหตุนี้ก็เลยไม่ต้องประหลาดใจว่าเพราะเหตุใดค่ายเกมที่ระบุเอาไว้ภายในโบนัสต่างๆก็เลยมีไม่ค่อยมากแค่ไหน แม้กระนั้นสรุปได้ว่าการระบุค่ายเกมที่ใช้ได้กับเครดิตฟรีทางเว็บไซต์จะเป็นผู้กำหนด ถ้าหากพวกเราต้องการทราบเนื้อหาส่วนนี้จำเป็นจะต้องเปิดเข้าไปมองส่วนของข้อตกลงก่อนเสมอ
    เครดิตยอดฮิตที่หาได้จากเว็บไซต์พนันออนไลน์ดูเหมือนจะทุกเว็บไซต์
    โดยส่วนมากแล้วเครดิตฟรีที่ใช้ได้กับ บาคาร่า จะเป็นพวกโบนัสต้อนรับสมาชิกใหม่ ที่แจกเครดิตเพิ่มจากยอดฝากแรกที่ 50 – 200% โบนัสรายวันที่แจกให้อยู่โดยประมาณ 20 – 50% ในส่วนของค่าโบนัสต่างๆก็จะขึ้นกับแต่ละเว็บไซต์ว่าตั้งเอาไว้เท่าไร รวมทั้งมีเงื่อนไขยังไงให้นักเสี่ยงโชคจะต้องทำ ซึ่งข้อแม้หลักก็คือการเทิร์นยอดก่อนทำรายการถอนนั้นเอง ถ้าเกิดคุณรังเกียจผูกมัดด้วยข้อจำกัดหรือต้องการเล่นแล้วเบิกเงินได้เลยก็ไม่ชี้แนะให้กดรับโปรโมชั่นพวกนี้

    ReplyDelete
  21. สุดยอดเกมส็อตคุณภาพดีทีสุดของโลก เกมสล็อตที่จะมอบความสุขให้คุณ เป็นเกมสล็อตที่จะสามารถทำเงินให้คุณได้อย่างต่อเนื่องไม่มีหยุด นั้นก็คือเกมสล็อจของทางค่าย PG SLOT นั้นเอง หยุดที่จะไปนั่งหาเกมสล็อตเองซักที คุณจะเสียเวลาไปทำไหมกับเราหาเกมสล้อตที่ดีที่สุดนั้นก็เพราะว่า เรานี้และที่มอบสิ่งที่ดีที่สุดให้กับนักเล่นสล็อตแล้ว

    ReplyDelete