আপডেট: এই উত্তরটি মূল প্রশ্নের জবাবে, জাভা এসই 8 এর কি জোড় বা টিপলস রয়েছে? (এবং অন্তর্নিহিতভাবে, যদি না হয় তবে কেন নয়?) প্রশ্নটি আরও একটি সম্পূর্ণ উদাহরণ সহ ওপি আপডেট করেছে, তবে মনে হচ্ছে এটি কোনও ধরণের জুড়ি কাঠামো ব্যবহার না করেই সমাধান করা যেতে পারে। [ওপি থেকে দ্রষ্টব্য: এখানে অন্যান্য সঠিক উত্তর ।]
সংক্ষিপ্ত উত্তর হলো 'না'। হয় আপনাকে নিজের রোল করতে হবে বা এটি প্রয়োগ করে এমন কয়েকটি লাইব্রেরির মধ্যে একটি আনতে হবে।
Pair
জাভা এসই মধ্যে একটি ক্লাস থাকার প্রস্তাব দেওয়া হয়েছিল এবং একবারে প্রত্যাখ্যান করা হয়েছিল। ওপেনজেডকে মেলিং তালিকার একটিতে এই আলোচনার থ্রেডটি দেখুন । ট্রেড অফগুলি সুস্পষ্ট নয়। একদিকে অন্যান্য লাইব্রেরিতে এবং অ্যাপ্লিকেশন কোডগুলিতে অনেকগুলি জুড়ি বাস্তবায়ন রয়েছে। এটি একটি প্রয়োজন দেখায়, এবং জাভা এসইতে এ জাতীয় শ্রেণি যুক্ত করা পুনরায় ব্যবহার এবং ভাগ করে নেবে। অন্যদিকে, একটি জোড় শ্রেণি থাকা প্রয়োজনীয় প্রকার এবং বিমূর্ততা তৈরি না করেই জোড় এবং সংগ্রহের বাইরে জটিল ডেটা স্ট্রাকচার তৈরি করার লোভকে যুক্ত করে। (এটি সেই থ্রেড থেকে কেভিন বুরিলনের বার্তার একটি প্যারাফ্রেজ )
আমি সবাইকে পুরো ইমেল থ্রেডটি পড়ার পরামর্শ দিই। এটি লক্ষণীয়ভাবে অন্তর্দৃষ্টিযুক্ত এবং এর কোনও অগ্নিসংযোগ নেই। এটা যথেষ্ট বিশ্বাসযোগ্য। এটি শুরু হওয়ার পরে আমি ভেবেছিলাম, "হ্যাঁ, জাভা এসইতে একটি জোড় ক্লাস থাকা উচিত" তবে থ্রেডটি শেষ হওয়ার সাথে সাথে আমি আমার মন পরিবর্তন করেছিলাম।
তবে খেয়াল করুন যে জাভাএফএক্স-এর javafx.util.Pair ক্লাস রয়েছে। জাভাএফএক্সের এপিআইগুলি জাভা এসই এপিআই থেকে আলাদাভাবে বিকশিত হয়েছিল।
যেহেতু লিঙ্কিত প্রশ্ন থেকে কেউ দেখতে পাচ্ছেন যে জাভার সি ++ পেয়ারের সমতুল্য কী? দৃশ্যত এমন একটি সহজ এপিআই যা ঘিরে রয়েছে বেশ বড় একটি ডিজাইনের স্পেস। অবজেক্টগুলি কি অপরিবর্তনীয় হওয়া উচিত? সেগুলি কি সিরিয়ালযোগ্য হতে হবে? তাদের তুলনা করা উচিত? ক্লাস চূড়ান্ত হওয়া উচিত নাকি? দুটি উপাদান আদেশ করা উচিত? এটি ইন্টারফেস বা শ্রেণি হওয়া উচিত? জোড়ায় থামবে কেন? ট্রিপল, কোয়াডস বা এন-টিপলস কেন নয়?
এবং অবশ্যই উপাদানগুলির জন্য বাইকশেড অনিবার্য রয়েছে:
- (ক, খ)
- (প্রথম সেকেন্ড)
- (বাম ডান)
- (গাড়ি, সিডিআর)
- (ফু, বার)
- প্রভৃতি
একটি বড় বিষয় যা খুব কমই উল্লেখ করা হয়েছে তা হ'ল আদিমদের সাথে জুটির সম্পর্ক। আপনার যদি এমন কোনও (int x, int y)
ড্যাটাম থাকে যা 2 ডি স্পেসে একটি বিন্দু উপস্থাপন করে, এটি উপস্থাপন করে যেমন দুটি 32-বিট শব্দের পরিবর্তে তিনটি বস্তুPair<Integer, Integer>
গ্রাস করে । তদুপরি, এই বিষয়গুলি অবশ্যই গাদাতে থাকা উচিত এবং এতে জিসি ওভারহেড ব্যয় করবে।
এটি স্পষ্ট বলে মনে হবে যে, স্ট্রিমগুলির মতো, এখানে জোড়গুলির জন্য আদিম বিশেষত্ব থাকা অপরিহার্য হবে। আমরা কি দেখতে চাই:
Pair
ObjIntPair
ObjLongPair
ObjDoublePair
IntObjPair
IntIntPair
IntLongPair
IntDoublePair
LongObjPair
LongIntPair
LongLongPair
LongDoublePair
DoubleObjPair
DoubleIntPair
DoubleLongPair
DoubleDoublePair
এমনকি একটি IntIntPair
এখনও স্তূপে একটি বস্তুর প্রয়োজন হবে।
এগুলি অবশ্যই java.util.function
জাভা এসই 8 এর প্যাকেজে ফাংশনাল ইন্টারফেসগুলির প্রসারণের কথা মনে করিয়ে দেয় you আপনি যুক্তিও দিতে পারেন যে এটি যথেষ্ট নয়, এবং বলার জন্য সেই বিশেষত্বগুলিও Boolean
যুক্ত করা উচিত।
আমার অনুভূতিটি হ'ল জাভা যদি অনেক আগে জোড় ক্লাস যুক্ত করে থাকে তবে এটি সহজ বা সরল ছিল, এবং আমরা এখন যেগুলি ব্যবহারের কল্পনা করছি সেগুলি সন্তুষ্ট হত না। বিবেচনা করুন যে জেডিকে ১.০ টাইম ফ্রেমে পেয়ার যুক্ত করা থাকলে এটি সম্ভবত পরিবর্তনীয় হতে পারত! (Java.util.Date দেখুন।) লোকেরা কি এতে খুশি হত? আমার ধারণাটি হ'ল জাভাতে যদি একটি জোড় শ্রেণি থাকত তবে এটি দয়ালু-বাছাই-না-সত্যিই দরকারী everybody এবং প্রত্যেকে এখনও তাদের চাহিদা পূরণের জন্য নিজস্ব ঘূর্ণায়িত হবে, বহিরাগত লাইব্রেরিতে বিভিন্ন জুড়ি এবং টুপল বাস্তবায়ন হবে, এবং জাভা জুড়ি ক্লাস কীভাবে ঠিক করা যায় সে সম্পর্কে লোকেরা তর্ক-বিতর্ক / আলোচনা করবে। অন্য কথায়, আমরা আজ যেখানে রয়েছি একই জায়গায় ধরণের।
ইতিমধ্যে, মৌলিক সমস্যাটি সমাধানের জন্য কিছু কাজ চলছে, যা মূল্য প্রকারের জন্য জেভিএম (এবং শেষ পর্যন্ত জাভা ভাষায়) আরও ভাল সমর্থন । মূল্যবোধের নথির এই রাজ্যটি দেখুন । এটি প্রাথমিক, অনুমানমূলক কাজ এবং এটি কেবল জেভিএমের দৃষ্টিকোণ থেকে বিষয়গুলি কভার করে, তবে এর পিছনে ইতিমধ্যে এর যথেষ্ট পরিমাণে চিন্তাভাবনা রয়েছে। অবশ্যই এটি জাভা 9 তে প্রবেশ করবে বা যে কোনও জায়গায় প্রবেশ করবে এমন কোনও গ্যারান্টি নেই but তবে এটি এই বিষয়টিতে ভাবনার বর্তমান দিকটি দেখায়।
AbstractMap.SimpleImmutableEntry<K,V>
যাহাই হউক না কেন, বছরের পর বছর ধরে ... কিন্তু ম্যাপিং পরিবর্তেi
করার(i, value[i])
মাত্র দ্বারা ফিল্টার করার জন্যvalue[i]
এবং ম্যাপিং ফিরেi
: কেন শুধু ফিল্টার দ্বারাvalue[i]
ম্যাপিং ছাড়াই প্রথম স্থানে?