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. 

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

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

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

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

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

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

    ReplyDelete
  14. 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
  15. 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
  16. สมัคร SUPER SLOT สมาชิกใหม่รับโบนัสทันที 100% และยังมีโปรโมชั่นพิเศษอีกมากมาย ที่สามารถเลือกรับได้ตามใจชอบ มีรางวัลโบนัสและแจ็คพอร์ตเพียบ แจกหนัก แจกไว จ่ายเต็ม คลิกที่นี้

    ReplyDelete
  17. Our work will be checked daily to ทางเข้า sbobet ensure that all members will be able to have uninterrupted access and enjoy using our services.

    ReplyDelete
  18. There will be a very sexy beautiful girl to serve customers 24 hours a day. The game camp is this attractive Slots สมัครสล็อตpg

    ReplyDelete
  19. BETFLIXHD Fish shooting game, fun to play. Go with the legendary fish shooting game camp. betflix

    ReplyDelete
  20. We are a web of game camps. Not only slots, we also have casino games and fish shooting. บาคาร่า

    ReplyDelete
  21. ทุกความบันเทิงและความสนุกในเว็บไซต์เดียว PG SLOT ทำเงินง่าย ๆ มาหมุนเกมกับเรา เลือกสร้างรายได้จากเกมต่างๆ ที่พร้อมเสมอที่จะมอบประสบการณ์ใหม่ๆ ให้กับคุณบนเพย์ไลน์ที่ไม่ซ้ำใคร เพลิดเพลินไปกับที่เดียว pgslotx.co ที่เปิดมานานกว่า 5 ปี เล่นเกมและยินดีจ่ายรางวัลจริง มีโหมดให้ลองเล่นเกมสล็อตก่อน เลือกจากเกมต่างๆ มากมาย เช่น เกมผจญภัย เกมต่อสู้ เกมแฟนตาซี พร้อมกราฟิกที่ยอดเยี่ยม

    ReplyDelete
  22. เกมสล็อต Gold Rush จากค่ายเกมที่สุดคลาสสิกของค่าย Pragmatic Play หรือ เกมสล็อตนักขุดทอง นำเสนอมาในธีมของนักสำรวจแร่ที่ครึกครื้น ไปสำรวจเหมืองทอง ที่มีทองล้ำค่าจำนวนมหาศาลอยู่ภายในเหมาะแก่การทำเงินกำไรให้กับตนเองค่อนข้างสูง เกมสล็อตนักขุดทอง เป็นเกมวิดีโอ 5 รีล 3 แถว RTP 96.97% มีอัตราการชนะถึง 2,000X เท่าของเดิมพัน

    ReplyDelete
  23. เล่นได้เลยกับเกมการเล่นที่สนุกที่สุด เลือกเล่นแบบไม่มีขั้นต่ำ สนุกกับการเล่นแปลกตา ลิงสามตัว เป็นเกมที่เล่าถึงเมืองใหญ่ที่ได้ถูกเหล่าซอมบี้ครอบงำเมือง ซึ่งมึแค่เหล่านักเดินทางเท่านั้นที่สามารถปราบปรามเหล่าปีศาจร้าย ด้วยอาวุธปืนสุดแสนจะคิดได้ ทำกำไรได้เลยจากเว็บไซต์ PGSLOTGAMES เว็บเกมการเล่นที่แสนจะแปลกใหม่สุด เล่นได้เลยกับเกมการเล่นไม่เหมือนใคร เล่นได้เลยตลอเ 24 ชั่วโมง ฟีเจอร์จัดหนักจัดเต็ม กับเกมสล็อตแจ็คพ็อตแตกบ่อย เล่นได้เลยทั้งเบราว์เซอร์ และแอพลิเคชั่น เราขอแนะนำกับ การทดลองเล่นฟรี เล่นได้เลยตลอดเวลา ทำได้เลยกับเกมลิงสามตัว ทำกำไรได้มากมาย สนุกได้แบบไม่มีขั้นต่ำ

    ReplyDelete
  24. เกมที่ให้คุณได้เเข้าไปยัง ดินเแดนแห่ง เกมโอเปร่า เกมที่แสนที่จะสนุกกับการเล่นตั้งแต่หลักหน่วย ไปจนถึงหลักพัน เล่นได้เลเยกับเรา ได้ในหลากหลายค่ายเกม ไม่ว่าจะเป็น Slotxo ppgame เลือกทำกำไรได้ในทุกรสชาติ ทำกำไรกับเราได้เลยที่ PGSLOTGAMES เล่นง่าย โปรโมชั่นเพียบ สนุกได้ตลอด 24 ชั่วโมง

    ReplyDelete
  25. มีหลายเกม หลายค่าย ไว้รองรับผู้เดิมพัน เล่นสนุกได้ทั้งวัน พร้อมเปิดให้บริการตลอด 24 ชั่วโมง ฝากถอนด้วยระบบอัตโนมัติที่ทำได้เร็ว และง่ายมากๆ ไม่อยากพลาดเว็บเกมที่ได้รับมาตรฐานต้องรีบคลิกมาเล่นที่ pg slot เว็บตรง

    ReplyDelete
  26. สล็อตpg เกมสล็อตที่ทำเงินได้เร็วมากที่สุด ใช้เวลาไม่นานเพียงแค่ 10 – 15 นาที ก็สามารถลุ้นรับรางวัลแจ็คพอตแตกง่ายได้อย่างน่าตื่นตาตื่นใจ ทำให้ สล็อตเว็บใหญ่ แตกบ่อย มีแต่เกม สล็อตที่ทำเงินได้ง่ายมากที่สุด ไม่ว่าจะเลือกเล่น สล็อตเกมไหน ๆ ก็จะลุ้นรับเงินรางวัลได้อย่างสนุกสนาน

    ReplyDelete
  27. หนึ่งบัญชีสามารถเล่นเกมส์ gคลับ ทั้งหมดได้ไม่ว่าคุณต้องการเล่นเกมส์อะไร สล็อต จีคลับ888 ก็เลือกแบรนด์เกมส์ออนไลน์ชั้นนำที่ดีที่สุดให้คุณได้เลือกเล่น ไม่ว่าจะเป็นคาสิโนสด สล็อต เกมส์ยิงปลาและเกมส์ไพ่ การเดิมพันทุกชนิดจะทำให้คุณตื่นเต้นด้วยวัตถุที่สวยงามและระบบที่ทันสมัยและสามารถตอบสนองความต้องการของคุณในรูปแบบต่าง ๆ gclub88888

    ReplyDelete
  28. Need professional WordPress Web Design Services? We're experts in developing attractive mobile-friendly WordPress websites for businesses. Contact us today! https://just99marketing.com/wordpress-web-design

    ReplyDelete
  29. รวมถึงเมื่อมีเงินกำไรแล้ว ให้นำเงินกำไรเก็บแยกเอาไว้ต่างหากแล้วใช้เงินทุนในการเล่นเท่าเดิมจนกว่าจะจบรอบที่วางแผนเอาไว้เพื่อรักษาเงินกำไรที่หามาได้เอาไว้ให้มากที่สุดอีกหนึ่งปัจจัยที่จะช่วยให้คุณมีเงินทุนในการเล่น สล็อตเว็บตรง ให้ได้เงินแสนเพิ่มมากขึ้นคือการรับโบนัสต่าง ๆ ที่ทางเว็บจัดเอาไว้ ซึ่งจะช่วยเพิ่มเงินลงทุนให้จากยอดเงินที่ฝากเข้าไปได้ตั้งแต่ 10% จนถึง 100% เลยทีเดียว และอย่าลืมว่าจะต้องเล่นตามแผนที่วางเอาไว้อย่างรัดกุม ห้ามเล่นผิดแผน

    ReplyDelete
  30. ถ้าได้เงินกำไรเกิน 15% ของเงินลงทุนทั้งหมดแล้วให้ถอนเงินออกมาเรื่อย ๆ เพียงเท่านี้การเล่นสล็อตให้ได้เงินแสนโดยลงทุนแค่ 1,000 ก็จะไม่ใช่เพียงความฝันอีกต่อไปปั่นสล็อตให้ได้เงิน 100,000 บาท จากการลงทุนเพียง 1,000 บาท การลงทุนที่คุ้มค่ามากที่สุดในปี 2022เปลี่ยนเงิน 1,000 บาทให้กลายเป็นเงินแสน ด้วยการเล่นเว็บสล็อต ไม่ใช่เรื่องยาก เพราะสล็อตนั้นเป็นเกม pg slotที่จ่ายเงินรางวัลกันแบบทวีคูณตามจำนวนเงินเดิมพันที่ใช้

    ReplyDelete
  31. สร้างเงินกำไรได้อย่างต่อเนื่องด้วย สูตรบาคาร่า SA ซึ่งเป็นสูตรที่จะทำให้คุณสามารถพิชิตเงินล้านได้แน่นอน ทำไปใช้กับเกมบาคาร่าออนไลน์ได้จริง และใช้งานง่าย สามารถกดรับสูตรฟรีบนเว็บไซต์ของเราได้แล้ววันนี้ เพียงแค่สมัครเป็นสมาชิกกับเรา เป็นครอบครัวแห่งการลงทุนบนเว็บเกมของเราไม่มีคำว่าผิดหวังอย่างแน่นอน และเข้าร่วมเดิมพันผ่านระบบอัตโนมัติได้ตลอด 24 ชั่วโมง เปิดให้บริการทุกวัน ไม่มีวันหยุด และแทงบาคาร่าขั้นต่ำเพียงแค่ 10 บาทเท่านั้น แตกง่าย แตกเร็ว แตกเท่าไหร่เราพร้อมจ่ายไม่อั้น ทำรายการฝากถอนฟรี ไม่มีขั้นต่ำ ด้วยแอพพลิเคชั่น True Money Wallet ฟรี และถอนเงินได้ไม่อั้น ไม่ติดเทิร์น

    ReplyDelete
  32. Find something to do during your free time duringดูหนังออนไลน์ the day or during your break from work. Sit down and read this website. It can make your free time more valuable time.

    ReplyDelete