পেয়ারা গ্রন্থাগার: এর সর্বাধিক দরকারী এবং / বা লুকানো বৈশিষ্ট্যগুলি কী কী? [বন্ধ]


131

আমি পেয়ারা এপিআইয়ের দ্রুত স্ক্যান করেছি এবং এটি সরবরাহ করে এমন নতুন সংগ্রহের ধরণগুলি ( Multimapএবং BiMapউদাহরণস্বরূপ দরকারী বলে মনে হয়) এবং আমি যে প্রকল্পে কাজ করি সেগুলিতে গ্রন্থাগারটি অন্তর্ভুক্ত করার কথা ভাবছি।

তবে, লাইব্রেরিগুলি উইলি-নিলিতে অন্তর্ভুক্ত করার জন্য আমারও একটি বিশৃঙ্খলা রয়েছে, যদি সেগুলির কোনও লাভ হয় না এবং বৈশিষ্ট্যগুলি শেখার জন্য মূল্যবান সময় নষ্ট হয়।

আপনি কি আপনার প্রকল্পে পেয়ারা গ্রন্থাগারটি অন্তর্ভুক্ত করেছেন এবং এটি কোনও অপ্রত্যাশিত উপায়ে কার্যকর প্রমাণিত হয়েছে? আপনি কি সবসময় ভবিষ্যতে এটি ব্যবহার করবেন? এর মূল সুবিধা / সময় সাশ্রয়কারী কী হয়েছে? এর লুকানো বৈশিষ্ট্যগুলি কী কী?


4
আপনার শিরোনাম এবং আপনার প্রশ্নের সত্যিই মেলে না।
আইয়ুব

4
"নতুন সংগ্রহের ধরণগুলি ... দরকারী বলে মনে হচ্ছে" এবং "আমার কাছে লাইব্রেরি অন্তর্ভুক্ত করার জন্য একটি টিকটিক্স আছে ... যদি সেগুলির কোনও লাভ হয় না" - ভাল তবে তা কি? আপনি হয় লাইব্রেরিটি দরকারী বলে মনে করেন এবং এটির উপকার রয়েছে বা আপনি তা করেন না
matt b

২০১ of সালের হিসাবে (এখন বন্ধ হওয়া প্রশ্ন), আপনি যদি সর্বশেষতম গ্রেডল (৪.৪.১) পেয়ারা ব্যবহার করেন তবে "এই নির্ভরতা অভ্যন্তরীণভাবে ব্যবহৃত হয়, এবং ভোক্তাদের কাছে প্রকাশিত হয় না" এই শব্দটি সহ, ডিফল্টরূপে নির্ভরতা হিসাবে build.gradle এ যোগ করা হয় 21 তাদের নিজস্ব সংকলন শ্রেণিপথের উপর ", যা গ্র্যাডল দল সিদ্ধান্ত নিয়েছে যে সেখানে কিছু মূল্যবান জিনিস রয়েছে।
মাইকে রডেন্ট

উত্তর:


158

গুরুতরভাবে, পেয়ারা সবকিছু দরকারী। আমি এটি বেশ কিছুদিন ধরে ব্যবহার করে আসছি এবং এখনও সর্বদা নতুন কিছু আবিষ্কার করতে পেরেছি যা এটি হাতে হাতে করার চেয়ে কম কোড নেয় with

কিছু জিনিস অন্যেরা সত্যই উল্লেখ করেন নি যে আমি ভালোবাসি:

  • Multimapএস শুধু দুর্দান্ত। আপনি যে কোনও সময় যেমন ব্যবহার করবেন Map<Foo, Collection<Bar>>, পরিবর্তে একটি মাল্টিম্যাপ ব্যবহার করুন এবং কোনও কী-তে ম্যাপযুক্ত বিদ্যমান সংগ্রহের জন্য নিজেকে এক টন ক্লান্তিকর চেক সংরক্ষণ করুন এবং এটি না থাকলে এটি তৈরি এবং যুক্ত করুন।
  • Orderingআপনি যেমন Comparatorচান ঠিক তেমন আচরণ করে তা ওঠার জন্য দুর্দান্ত ।
  • Maps.uniqueIndexএবং Multimaps.index: এই পদ্ধতি একটি নিতে Iterableএবং একটি Functionএবং একটি বিল্ড ImmutableMapবা ImmutableListMultimapযে ইনডেক্স মান Iterableপ্রতিটি ফাংশন প্রয়োগের ফলাফলের দ্বারা। সুতরাং কোনও ফাংশন যা কোনও আইটেমের আইডি পুনরুদ্ধার করে আপনি তার আইডি দ্বারা আইটেমের একটি তালিকা একটি লাইনে সূচী করতে পারেন।
  • এটি যে কার্যকরী স্টাফ সরবরাহ করে ... filter, transformইত্যাদি ইত্যাদি Functionএস এবং Predicateএস এর জন্য ক্লাস ব্যবহারের ভার্বোসটি সত্ত্বেও , আমি এটি দরকারী বলে মনে করেছি। আমি এখানে এখানে সুন্দরভাবে পড়ার উপায়ের একটি উদাহরণ দিই ।
  • ComparisonChainএকটি ছোট, সহজেই উপেক্ষিত শ্রেণি যা কার্যকর যখন আপনি একটি তুলনা পদ্ধতি লিখতে চান যা উত্তরাধিকারে একাধিক মানকে তুলনা করে এবং প্রথম পার্থক্যটি পাওয়া গেলে ফিরে আসা উচিত। এটি এটির সমস্ত টেডিয়াম সরিয়ে দেয়, এটি কেবল কয়েকটি লাইনযুক্ত শিকল পদ্ধতিতে কল করে making
  • Objects.equal(Object,Object) - নাল নিরাপদ সমান।
  • Objects.hashCode(Object...) - আপনার শ্রেণীর একাধিক ক্ষেত্রের উপর ভিত্তি করে একটি হ্যাশ কোড পাওয়ার সহজ উপায়।
  • Objects.firstNonNull(Object,Object) - প্রথম মানটি শূন্য হলে ডিফল্ট মান পাওয়ার জন্য কোড হ্রাস করে, বিশেষত যদি প্রথম মানটি কোনও মেথড কলের ফলাফল হয় (এটি আপনাকে সাধারণ পদ্ধতিতে করার আগে এটি একটি ভেরিয়েবলের কাছে নির্ধারণ করতে হবে)।
  • CharMatcherগুলি ইতিমধ্যে উল্লেখ করা হয়েছিল, তবে তারা খুব শক্তিশালী।
  • Throwablesআপনাকে থ্রোয়েবলের সাহায্যে কিছু সুন্দর জিনিস করতে দেয়, যেমন Throwables.propagateএকটি থ্রোয়েবলকে যদি এটি RuntimeExceptionবা একটি হয় Errorএবং পুনরায় এটি একটি জড়িয়ে RuntimeExceptionদেয় এবং অন্যথায় তা ছুড়ে দেয়।

আমি অবশ্যই যেতে পারি, তবে আমাকে কাজ করতে হবে। =) যাইহোক, আমার এখানে কিছু পছন্দের জিনিস তালিকাভুক্ত করা সত্ত্বেও, সত্যটি হল যে পেয়ারা সমস্ত কিছু কোনও না কোনও পরিস্থিতিতে কার্যকর। এর বেশিরভাগ ক্ষেত্রেই প্রায়শই কার্যকর হয়। এটি ব্যবহার করার সাথে সাথে আপনি আরও ব্যবহার আবিষ্কার করতে পারবেন। এটি ব্যবহার না করা আপনার পিঠের পিছনে একটি হাত বাঁধা থাকার মতো মনে হবে।


2
সম্পূর্ণরূপে একমত ComparisionChain
হুইস্কিসিয়ার

44

গুগলের অভ্যন্তরে আমি কয়েক বছর ধরে কার্যকরভাবে পেয়ারা ব্যবহার করছি - এবং এটি দুর্দান্ত।

আমি যে অংশগুলি বিশেষভাবে পছন্দ করি সেগুলি হ'ল:

  • Charsets.* - এত সহজ, এত দরকারী
  • সংগ্রহগুলি
  • আইও হ্যান্ডলিং (সম্পূর্ণ একক লাইনে একটি উত্স পড়ুন ইত্যাদি)
  • Splitter/Joiner
  • Preconditions

6
নোট করুন যে আমাদের এখন জাভা 7+ এ স্ট্যান্ডার্ডচরেটস রয়েছে। আমি আশ্চর্য হয়েছি যে পেয়ার আরও কতগুলি বৈশিষ্ট্য জাভাতে প্রবেশ করেছে?
ডেভিডএস

1
আমি এই মডার্নাইজার মাভেন প্লাগইনটি পেয়েছি যা পেয়ারার মতো তৃতীয় পক্ষের লাইব্রেরি সহ লিগ্যাসি এপিআইয়ের ব্যবহারগুলি সনাক্ত করে। কনফিগারেশন ফাইল প্রদর্শিত হবে StandardCharsets সহ 67 পেয়ারা deprecations রয়েছে রয়েছে।
ডেভিডএস

28

আমি প্রাথমিকভাবে এটি সংক্ষিপ্ত সংগ্রহের জন্য ব্যবহার করেছি। উদাহরণস্বরূপ, পরিবর্তে:

Map<String, Map<Long, List<String>>> map = new HashMap<String, Map<Long, List<String>>>();

তুমি এটি করতে পারো:

Map<String, Map<Long, List<String>>> map = Maps.newHashMap();

এটি মানচিত্র স্থাপন করাও সহজ:

ImmutableMap<String,String> map = ImmutableMap.of("key1", "value1", "key2", "value2");

এখন, আমি পেয়ারাতে উপস্থিত আরও কিছু দরকারী ইউটিলিটি আবিষ্কার করেছি। উদাহরণস্বরূপ, চারম্যাচার ক্লাস আপনাকে অক্ষরের ক্রমগুলি মেলাতে দেয়। আপনি করতে পারেন:

CharMatcher.inRange('a','z').or(inRange('A','Z'));

অথবা

String phoneNumber = CharMatcher.DIGIT.retainFrom("my phone number is 123456789");

21

চারম্যাচারের প্রাকম্পিউটেড () পদ্ধতি ( উত্স ) একটি দুর্দান্ত "লুকানো বৈশিষ্ট্য" আমি অন্য দিন হোঁচট খেয়েছি

এটি সত্যিই কেবলমাত্র একটি অপ্টিমাইজেশন, যা একটি অনুসন্ধান সারণী তৈরি করে (কিছুটা অ্যারে ব্যবহার করে) এবং তারপরে কেবল "অক্ষর" মিলবে কিনা তা দেখার জন্য অক্ষরগুলি সন্ধান করে।

এটি কোনও ধরণের লুকানো অপ্টিমাইজেশন যা আপনি যখন কোনও লাইব্রেরি ব্যবহার করেন তখন তা উপকার করতে পারবেন, যাতে আপনি নিজের কোডে নিজেকে ভেবে দেখেননি।

অবশ্যই, আপনি যদি একটি জটিল চারম্যাচার তৈরি করেন যা আপনি বহুবার ব্যবহারের পরিকল্পনা করেন, আপনাকে অবশ্যই প্রাক্পম্পিউটেড () পদ্ধতিটি কল করতে হবে, যেমন:

CharMatcher complexMatcher = CharMatcher.anyOf("cat")
                                        .or(CharMatcher.DIGIT)
                                        .or(CharMatcher.WHITESPACE)
                                        .precomputed();

আমার পেয়ারা শোনার যোগ্য ভবিষ্যত নিয়েও প্রশ্ন রয়েছে । সম্ভব হলে আপনি আমার নকশাটি পর্যালোচনা করতে পারেন এবং আমার কিছু সন্দেহগুলি পরিষ্কার করতে এবং আমাকে সেগুলি কীভাবে মোকাবেলা করতে সাহায্য করতে পারেন? আমি সম্প্রতি পেয়ারা শ্রবণযোগ্য ফিউচারের সাথে কাজ শুরু করেছি এবং আমি এটি অনেক পছন্দ করি তবে কীভাবে এগুলি দক্ষতার সাথে ব্যবহার করতে পারি সে সম্পর্কে কিছুটা বিভ্রান্তি রয়েছে।
জন

16

গুগলের একটি ইউটিউব ভিডিও এখানে রয়েছে (স্পিকার: কেভিন বোউরিলিয়ন, গুগলের মূল জাভা লাইব্রেরির জন্য প্রধান ইঞ্জিনিয়ার) যা গুগল সংগ্রহের সৌন্দর্য দেখায়। গুগল একটি কাজ করেছিল, যা আমি বিশ্বাস করি উজ্জ্বল, তা হ'ল সংগ্রহে অপরিচ্ছন্নতার গ্যারান্টি


12

গুগল পেয়ারা একটি ইউটিলিটি লাইব্রেরি, তাই আমি সন্দেহ করি যে এর ভিতরে একটি হত্যাকারী শ্রেণি রয়েছে। ইউটিলিটি সম্পর্কে পুরো জিনিস আপনি প্রায় প্রতিটি প্রকল্পে এটি ব্যবহার করেন। আমি এমন কোনও প্রকল্পের কথা মনে করতে পারি না যা জাভা সংগ্রহ ব্যবহার করে না। এবং সত্য, গুগল পেয়ারা সংগ্রহের ইউটিলিটি দুর্দান্ত এবং এটি জাভা এসডিকে নিজেই হওয়া উচিত।

আমি গুগু পেয়ারা উপর ক্লাস সম্পর্কে তিনটি নিবন্ধ লিখেছি:

এবং এটি সবই নয়, পেয়ারা নিয়ে আপনি আরও অনেক কিছু করতে পারেন।


8

একেবারে খুব দরকারী। এটি প্রায় অলসভাবে একটি নতুন প্রকল্পে যুক্ত প্রথম লাইব্রেরি।

  1. আমরা আইট্রেটার / ইটারেবলস এবং ফাংশন ইন্টারফেসের খুব পছন্দ করি।
  2. ইন্টারফেসের পরিষেবা পরিবার দুর্দান্ত বিমূর্ততা
  3. আমরা এতটা প্রতিশ্রুতিবদ্ধ যে যোগাযোগ করার জন্য আমরা আমাদের API প্রকারের ImmutableXXX ক্লাসগুলি ব্যবহার শুরু করেছি যাতে এটি পরিবর্তন করা যায় না।
  4. গণনা মানচিত্র (ম্যাপমেকার থেকে) নির্দিষ্ট পরিস্থিতিতে দুর্দান্ত are

সামগ্রিকভাবে, গ্রন্থাগারটি খুব উচ্চ মানের। এপিআই ভাল চিন্তা করা হয়, বাস্তবায়ন শক্ত। অত্যন্ত বাঞ্ছনীয়.


7

ম্যাপমেকার এখন সীমাবদ্ধ এলআরইউ ক্যাশে অফার করে - এটি একটি ছোট্ট API এর পিছনে লুকানো বেশ কয়েকটি যথেষ্ট যন্ত্রপাতি। এটির বিশাল উপযোগের সম্ভাবনা রয়েছে এবং আমি এখনও সমস্ত কোডেই আছি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.