Skip to main content

Java 8-ын шинэ боломжууд

Java 8 (Java SE 8) нь 2014 оны 3-р сарын 18-нд гарсан.
Python мэтийн зарим программчлалын хэл дээр байдаг боловч жавагийн өмнөх хувилбаруудад байгаагүй хэд хэдэн халуухан шинэ боломжууд нэмэгдэж, жавагийн фэнүүдийг багагүй баярлуулж байсан билээ. Эдгээр боломжуудаас хамгийн түгээмэл хэрэглэгддгийг нь цөөхөн үгээр тайлбарлая.

1. forEach() method

    Collection-ы элемент бүрээр давтаж, давтах бүрт нэгэн төрлийн lambda expression бүхий үйлдэл гүйцэтгэнэ. Collection нь ArrayList, HashMap, ConcurrentHashMap, Vector, Queue, LinkedList г.м Iterable болон Map төрлийн классууд юм.
    Ж1: ArrayList-н элемент бүрийг upper case хийж хэвлэе.
            List<String> languages = new ArrayList<>(Arrays.asList("java", "python", "c#", "c++", "php"));
 List<String> languages = new ArrayList<>(Arrays.asList("java", "python", "c#", "c++", "php"));  
  languages.forEach(t -> {  
   t = t.toUpperCase();  
   System.out.println(t);  
  });  
Ж2: HashMap-н элемент бүрээр давтаж, python-ы ранкийг 1 болгож өөрчилье.
 Map<String, Integer> languageRank = new HashMap<>();  
  languageRank.put("java", 2);  
  languageRank.put("c#", 4);  
  languageRank.put("python", 3);  
  languageRank.forEach((k, v) -> {  
   if (k.equals("python"))  
   languageRank.put(k, 1);  
  });  

2. Lambda expression

    Lambda expression бол жава 8-ын хамгийн том, хамгийн чухал, хамгийн хайр хүрмээр боломж бөгөөд жава дээрх функциональ программчлалын эхний алхам болсон юм. Функциональ төрлийн программчлалыг хөнгөвчлөх, энгийн бөгөөд товчхон бичих, илүү хурдан ажиллах боломжийг олгодог. Ялангуяа Collection сангуудтай ажиллахад нэн тохиромжтой. Жишээлбэл, collections-оос хайх, шүүх, утга өөрчлөх г.м. Lambda expression-ийг жаахан бүдүүлгээр нэргүй функц гэж ч ойлгож болно.
Жишээ. Жагсаалтаас 3-аас их ранктай хэлнүүдийг хасаж хэвлэе.
 public class Language {  
           private String name;  
           private int rank;  
           public Language(String name, int rank) {  
                super();  
                this.name = name;  
                this.rank = rank;  
           }  
           public String getName() {  
                return name;  
           }  
           public int getRank() {  
                return rank;  
           }  
           @Override  
           public String toString() {  
                return String.format("%s: %s", this.name, this.rank);  
           }  
      }  
 List<Language> langs = new ArrayList<>(Arrays.asList(new Language("java", 1), new Language("python", 2),  
                     new Language("c#", 3), new Language("c++", 4), new Language("php", 5), new Language("ruby", 6)));  
           langs = langs.stream().filter(t -> t.getRank() <= 3).collect(Collectors.toList());  
           System.out.println(langs);  
 Хариу: [java: 1, python: 2, c#: 3]  

3. Stream API

    Stream API бас л маш их үр өгөөжтэй боломжуудын нэг. Collection дээр filter/map/reduce үйлдлүүдийг гүйцэтгэнэ. Тухайлбал, тодорхой нөхцөлөөр шүүх (filter), элемент бүрийн эсвэл нөхцөл хангасан элементүүдийн утгыг өөрчлөх (map), коллекцийн элементүүдээс тодорхой ганц үр дүн гаргаж авах (reduce) г.м. Дараалсан эсвэл параллел хэлбэрээр ажилладаг. stream(), parallelStream() method-уудаар хэрэгжүүлнэ.

4. Time API

    Жавагийн өмнөх огноотой ажилладаг сан, функцүүдийг бараг орвонгоор нь өөрчилсөн. Өмнө байсан thread safe биш, ойлгоход, кодчилоход төвөгтэй зэрэг асуудлыг шийдсэнд гол давуу тал нь оршино. LocalDate, LocalTime классуудын тусламжтайгаар хэрэгжүүлнэ.

    Товчхондоо нэг иймэрхүү. Эдгээрийн талаар дараа дэлгэрүүлж постолно.

Comments

Popular posts from this blog

4 бэрх

Нүүдэлчдийн эртний тоглоомуудын нэг болох шагайгаар тоглож үзээгүй хүн бараг байхгүй биз. Маниусыг ухаан орж байх үед зах зээл хэмээгч рүү дөнгөж орж байсан болоод ч тэр үү, шагайнаас өөр тоглочихмоор юм ч бараг байдаггүй байсан. Морь уралдуулах, шагай таалцах, шагай шүүрэх, дөрвөн бэрх орхих гээд л мөн ч сайхан тоглоомууд байж билээ. Гэснээс зарим хоолны газрууд ширээн дээрээ 4 шагай, мэргэлэх хүснэгтийн хамт тавьсан харагддаг. Хүснэгт нь 24 боломжтой байдаг ба заримдаа тохирох хувилбар олдохгүй, самгардах үе бишгүй тохиолддог. Ингэхэд 4 шагайг хаяхад нийтдээ хэдэн янзаар буух вэ? Алгебрын аргаар амархан тооцоолчхож болно л доо. Гэхдээ илүү хялбар аргаар, ө.х random буюу санамсаргүйгээр тоо сонгох аргаар бодъё. 1, 2, 3, 4 нь харгалзан морь, тэмээ, хонь, ямаа байг. Тэгвэл нэлээн хэдэн удаа (бүх боломжоор буухаар) давтаж санамсаргүйгээр 4 тоо сонгоод, уг 4 тоо өмнө сонгогдсон эсэхийг шалгаад, сонгогдоогүй бол боломжийн тоогоо нэмэгдүүлээд явна гэсэн үг. Нийт боломж (давхардсан тоогоо...

Regular expression-ий түгээмэл хэрэглээ

    Regular expression нь string буюу текстээс тодорхой бүтэц бүхий хэсгийг хайж олох зорилготой загвар (pattern) юм. Regular expression-г regex гэж товчилдог. Бүх программчлалын хэл дээр regex-тэй ажилладаг класс, функцүүд байдаг ба тухайн хэлний онцлогоос хамаарч класс, функц нь элдэв янзаар бичигддэг боловч regex нь яг адилхан, нэг стандартын дагуу бичигдэнэ. Өдөр тутмын амьдралд түгээмэл тохиолддог зарим асуудал(бодлого)-ыг жава дээр regex ашиглаж хэрхэн хялбар шийдэж болохыг жишээгээр тайлбарлая.     Жава дээр Pattern , Matcher класуудын тусламжтайгаар хэрэгжүүлнэ. 1. Регистрийн дугаар шалгах (Эхний хоёр орон кирил том үсэг, араас нь 8 оронтой тоо) Pattern ptrn = Pattern.compile("([А-Я|Ө|Ү]{2})(\\d{8})"); Matcher matcher1 = ptrn.matcher("БИ88042515"); Matcher matcher2 = ptrn.matcher("AB88042515"); System.out.println(String.format("1: %s; 2: %s", matcher1.matches(), matcher2.matches())); Хариу: 1: true; 2: false Pattern...

Текстээс хайх Aho-Corasick алгоритм

Alfred V. Aho болон Margaret J. Corasick нарын эрдэмтэд 1975 онд зохиосон. Текстэн өгөгдлөөс олон дэд текстийг нэгэн зэрэг буюу параллель хайж олоход зорилго нь оршдог. Бичих, уншихад хялбар болгох үүднээс текстэн өгөгдлөө текст , хайж олох текстүүдээ үг  гээд нэрлэчихье (Англиар харгалзан  text , dictionary эсвэл text string , pattern string гэж нэрлэдэг). Үг бүрээр давтаж, давталтын алхам бүрд текстийг эхнээс нь дуустал нь давтах байдлаар бол хэн ч олчихно л доо. Харамсалтай нь маш өндөр өртөгтэй, текст уртсаж, үг олшрох тусам тэсвэрлэхийн аргагүй удаан ажиллах учраас тэгж программ бичиж, хүнд хэрэглүүлнэ гэж бол ёстой гонж. Бодит амьдралд ийм төрлийн ямар жишээнүүд байдаг вэ? Текстэн дэх товчилсон үг болон нэр томьёо бүрд тайлбар оруулах Утасны жагсаалт өгөгдсөн бол эздийг нь харгалзуулах Гений дарааллаас тодорхой бүтэцтэй генүүдийг илрүүлэх г.м бичээд байвал дуусашгүй их юм бий. Тэгээд яг яаж вэ?     Гол санаа нь ижил эхлэлтэй үгнүүдийн...