লিনকের সমান সেরা জাভা কী? [বন্ধ]


17

জাভাতে এমন কোনও লাইব্রেরি রয়েছে যা লিনকের কার্যকারিতা সরবরাহের কাছাকাছি আসে?


1
আমি অনুমান করি আপনার অর্থ "লিনকির কার্যকারিতা" না হয়ে "লিনকির বাক্য গঠন" mean অনেকগুলি লাইব্রেরি রয়েছে যা একই কার্যকারিতা সরবরাহ করে :-)
মাইকেরা

জাভা সমতুল্য সম্ভবত গ্রোভি । টাইপ নিরাপত্তা loosing যদিও ব্যয়
মশা

উত্তর:


20

সম্পূর্ণ লিনকিউ ক্যোয়ারী সিনট্যাক্স পেতে আপনার নতুন কীওয়ার্ড এবং বাক্য গঠন কাঠামো সমর্থন করে ভাষা বৈশিষ্ট এবং সংকলকগুলির একটি আপডেট দরকার। এটি এখানে বেশিরভাগ পাঠকের বাইরে is

জাভাতে লিনক-জাতীয় পদ্ধতি-শৃঙ্খল সিনট্যাক্স পেতে যা সি # এর মতো দেখায় এবং কাজ করে, আপনার দুটি জিনিস প্রয়োজন যা জাভা সমর্থন করে না; এক্সটেনশন পদ্ধতি (স্থির পদ্ধতি যা কোনও উদাহরণ হিসাবে প্রয়োগ করা যেতে পারে যেমন এটি কোনও উদাহরণ পদ্ধতি), এবং লাম্বদা এক্সপ্রেশন (বেনামে প্রতিনিধি)। যাইহোক, যদি আপনি কিছুটা অতিরিক্ত কোডিং ভার্বোসটি করতে ইচ্ছুক হন তবে এই দুটি বিদ্যমান জাভা কনস্ট্রাক্টসের সাথে প্রতারণা করা যায়। জাভা সম্পর্কে আমি একটি জিনিস বিশেষভাবে আশ্চর্যজনক মনে করি বেনামে ইন্টারফেস বাস্তবায়ন তৈরি করার ক্ষমতা; একটি একক খাঁটি ফাংশন সহ একটি ইন্টারফেসে প্রয়োগ করা হয়েছে, যা মূলত সাধারণ বেনাম প্রতিনিধিদের জন্য অনুমতি দেয়, তবে আপনার প্রয়োজন প্রতিটি পদ্ধতির স্বাক্ষরের জন্য একটি ইন্টারফেস থাকে।

সুতরাং, লিঙ্কের আইমনামেবল (জাভাহেডগুলির জন্য পরিবেশনযোগ্য) দিক, একটি পদ্ধতি শৃঙ্খলা হিসাবে, জাভাতে আনুমানিক সম্ভব হওয়া উচিত; আপনি মূলত এটিকে একটি সাবলীল ইন্টারফেস হিসাবে প্রয়োগ করতে চান যা একটি মোনাডকে নিয়ন্ত্রণ করে। আপনার মত একটি ক্লাস দরকার LinqIterable, ইটেবারে প্রয়োগ করা, এটি:

  • যে কোনও আইটरेবল ইনপুটটিকে একটি লিনকিআইটায়ারাল দৃষ্টান্তে রূপান্তর করতে পারে
  • ফিল্টারিং, গ্রুপিং, কনটেনটেশন, ছেদ করা, অর্ডারিং ইত্যাদির মতো বেসিক লিস্ট প্রসেসিংয়ের পদ্ধতি রয়েছে যা একক ফাংশন ইন্টারফেস গ্রহণ করে এবং নতুন লিনকিএটারেবলস উত্পাদন করে, এই পদ্ধতিগুলিকে শৃঙ্খলিত করার অনুমতি দেয়, আশা করি একটি "অলস" ফ্যাশনে।
  • টিনলিস্ট, টোআর্রে, টোম্যাপ ইত্যাদির মতো লিনকআইট্রেবলকে "কংক্রিট" অবজেক্টে রূপান্তর করার পদ্ধতি রয়েছে

সুতরাং, আপনি সম্ভবত একটি "সাবলীল" লাইব্রেরি সংজ্ঞায়িত করতে পারেন যা একটি বিবৃতি যেমন:

Map<String, Integer> results = Linq.FromIterable(sourceList)
                           .Where(new Predicate{public bool Op(SomeStruct in){return in.SomeString == "criteria";}})
                           .OrderBy(new Func{public String Op(SomeStruct in){return in.SomeOtherString;}})
                           .Select(new Func{public SomeOtherStruct Op(SomeStruct in){return new SomeOtherStruct(in.SomeOtherString, in.SomeInt);}})
                           .ToMap(new Func{public String Op(SomeOtherStruct in){return in.StringField;}},
                                  new Func{public Integer Op(SomeOtherStruct in){return in.IntField;}});

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

এক্সপ্রেশন গাছগুলি রকেট বিজ্ঞান নয়, তবে নেট এই অঞ্চলে কী আছে তা বাস্তবায়নের জন্য এটি একটি গুরুত্বপূর্ণ প্রকল্প হবে; আপনার কেবল একটি এক্সপ্রেশন ট্রি তৈরি করার দক্ষতার প্রয়োজন নেই, আপনাকে নির্গত বাইটোকোডগুলি ব্যবহার করে এই গাছটিকে "সংকলন" করতে সক্ষম হতে হবে; আমি জানি না জাভার প্রতিচ্ছবি বেশ শক্তিশালী কিনা।


2
মজাজনকভাবে যথেষ্ট এক্সটেনশন পদ্ধতি এবং ল্যাম্বডা এক্সপ্রেশন উভয় জাভা ৮. সম্ভবত লিনকিউ চলছে?
xx

4
আচ্ছা আপনার কাছে যদি এক্সটেনশন পদ্ধতি এবং ল্যাম্বডাস থাকে তবে আপনার কাছে বিশাল প্রচেষ্টা ছাড়াই .NET এর লিনকের "গুনযুক্ত" দিক রয়েছে। এটি এখনও, যেমনটি আমি বলেছি, একটি লিঙ্ক ক্যোয়ারী তৈরি করা কীওয়ার্ডগুলিকে অনুমতি দেওয়ার জন্য জাভা স্পেসে পরিবর্তন প্রয়োজন, তবে সত্যই সত্য যে প্রতিদিনের লিনক ব্যবহারে আমি খুব বেশি কোয়েরি খুঁজে পাইনি যা কেবল খুব সহজে হয় না are একটি পদ্ধতি শৃঙ্খলা হিসাবে প্রকাশ করা হয়েছে, এবং সংকলক লিনক সিনট্যাক্সকে পদ্ধতি শৃঙ্খলে রূপান্তরিত করে (ভিএস প্লাগইনগুলি বিদ্যমান যেগুলি 1: 1 সর্বাধিক অনুসন্ধান এবং চেইনের মধ্যে রূপান্তর করতে পারে)। পরবর্তী আসল পদক্ষেপটি হবে এক্সপ্রেশন ট্রি (ক্যোয়ারিয়েল লিনক)।
কিথস

8

দেখা:

  • /programming/1217228/ কি-is-the-java-equivalent-for-linq - কেউ কেউ বলে যে এর সমতুল্য নেই বা আপনি লাম্বাজকে এটি অনুকরণ করতে ব্যবহার করতে পারেন ।
  • /programming/346721/linq-for-java-tool - জাভা 8 এর আগে আপনি গুগল সংগ্রহগুলি এটি নকল করতেও ব্যবহার করতে পারেন এবং স্কাল ভাষাটি ভাষা বৈশিষ্ট্য হিসাবে সমর্থন করে, ( স্কালা JVM- তে আরেকটি জনপ্রিয় ভাষা)।
  • http://www.infoq.com/news/2007/09/quaere-linq - একটি জাভা গ্রন্থাগার যা তাত্ত্বিকভাবে লিনকিউ কার্যকারিতা সরবরাহ করে (আমি নিজে এটি চেষ্টা করি নি)।

1
আপনি কি এই সম্পদগুলির প্রত্যেকটির কিছুটা বিস্তৃত করতে আপত্তি করবেন এবং আপনি কেন জিজ্ঞাসিত প্রশ্নের উত্তর হিসাবে এগুলি সুপারিশ করবেন? "লিঙ্ক কেবল-উত্তর" বেশ স্ট্যাক এক্সচেঞ্জ এ স্বাগত জানাই হয় না
মশা

হুম, আমি অনুমান করি যে এটি এমন একটি ক্ষেত্রে ইতিমধ্যে এই প্রশ্নটির উত্তর দেওয়া হয়েছিল - নকল হিসাবে মোডেড করা উচিত?
মার্টিজ ভার্বার্গ

1
@ মার্তিজজনভিবার্গ - আমরা সাইটগুলিতে নকল হিসাবে প্রশ্নগুলি চিহ্নিত করতে পারি না। উত্তরগুলি একা দাঁড়িয়ে থাকতে সক্ষম হতে হবে।
ChrisF

সম্পাদিত, আশা করি এটি এখন আরও কিছুটা সহায়ক।
মার্টিজ ভার্বার্গ

5

না। লিনাকের জাভা ঠিক নেই এমন প্রচুর ল্যাঙ্গেজ বৈশিষ্ট্য প্রয়োজন


4
জাভা জেনেরিকস আছে।
জোনাস

6
@ জোনাস: এটি সত্য, তবে তারা লিনকিউ সমর্থন করার পক্ষে যথেষ্ট শক্তিশালী কিনা তা অন্য বিষয়।
ডেড এমএমজি

2
@ ডেড এমজি এখনও, জাভাতে জেনারিকস রয়েছে।
মাহমুদ হোসাম

জেনেরিক্সের রেফারেন্সটি সরাতে সম্পাদিত
টম স্কোয়ায়ার্স

3

ব্যবহারের Scala জন্য কারণে এখানে ব্যাখ্যা :

স্কালার .NET বন্দর ব্যবহার করুন। এটি আপনাকে নেট .NET- তে সমস্ত ক্ষেত্রে সম্পূর্ণ নেটিভ অ্যাক্সেস দেয়, এতে স্পষ্টতই লিনকিউ অন্তর্ভুক্ত থাকে।

তুমি পারবে না, তাহলে তোমার মত লিব ব্যবহার করার চেষ্টা করতে পারেন functionjava বা lambdaj , কিন্তু আপনি LINQ সত্যিই বন্ধ না আসবে।


1
স্ক্যালায় লাইব্রেরি ছাড়া লিনকের মতো কিছু অন্তর্ভুক্ত নয়।
জোনাস

1
@ জোনাস: তাই? জাভা লাইব্রেরি সহ লিনকের মতো কিছু অন্তর্ভুক্ত করে না ।
back2dos

@ back2dos: হ্যাঁ, আপনাকে কেন একটি লাইব্রেরি দিয়ে উত্তর দিতে হবে তা ঠিক।
জোনাস

1
@ জোনাস: স্কালার মানক গ্রন্থাগারটি লিনকুইয়ের মতো। বা অন্য উপায়ে: লিনিক্যু হল # # এর জন্য ক্রিয়ামূলক প্রোগ্রামিং আইডিয়ামগুলির একটি সেট। আরো বিষয়ে এখানে
back2dos

@ back2dos: দুর্দান্ত লিঙ্কটির জন্য ধন্যবাদ, আমি এটি অন্তর্ভুক্ত করার স্বাধীনতা নিয়েছি।
ল্যান্ডেই

2

আমি লাইব্রেরির তালিকায় পেয়ারা যুক্ত করব যা আপনাকে লিনকুইয়ের কিছু জিনিস অর্জনে সহায়তা করতে পারে।

তবে অন্যরা যেমন উল্লেখ করেছে, খাঁটি জাভার কোনও সমতুল্য নেই।


আপনি এটি কি করে সে সম্পর্কে আরও ব্যাখ্যা করতে আপত্তি করবেন এবং আপনি কেন জিজ্ঞাসিত প্রশ্নের উত্তর হিসাবে এটি সুপারিশ করবেন? "লিঙ্ক কেবল-উত্তর" বেশ স্ট্যাক এক্সচেঞ্জ এ স্বাগত জানাই হয় না
মশা

2

আপনি ক্লোজারে লিখিত এসকিউএল প্রশ্নের জন্য ডিএসএল করমা ব্যবহার করতে পারেন ।

সিনট্যাক্সটি বেশ ঝরঝরে:

(select user
  (with address)
  (fields :firstName :lastName :address.state)
  (where {:email "korma@sqlkorma.com"}))

আপনি জাভা থেকে প্রাসঙ্গিক ক্লোজার লাইব্রেরিগুলি আমদানি করে এবং কেবল সাধারণ ক্লোজার / জাভা ইন্টারপ ব্যবহার করে খুব সহজেই এটি কল করতে পারেন।


সুতরাং, এটি লিনককে এসকিউএল এর উপর অনুকরণ করবে, লিংককে বস্তুর উপরে নয়, তাই না?
চাকরি

@ জোব: হ্যাঁ, এটি এসকিউএল এর জন্য ডিজাইন করা হয়েছে। যদিও আমি কোনও কারণ দেখতে পাচ্ছি না যে এটির পাশাপাশি বস্তুর জন্য এটি বাড়ানো / অভিযোজিত হতে পারে না।
মাইক্রা

2

জাভাতে কোনও নেটিভ বৈশিষ্ট্য নেই যা লিনিকের অনুকরণ করে। তবে, বেশ কয়েকটি এপিআই রয়েছে যা একই কার্যকারিতা সরবরাহ করে।

উদাহরণস্বরূপ, এই ব্লগ পোস্টে লিনাকের প্রতিলিপি তৈরি করতে একটি কাস্টম জার রয়েছে।
http://javaworldwide.blogspot.in/2012/09/linq-in-java.html

এবং এটি পোস্ট থেকে এপিআইর একটি উদাহরণ ব্যবহার:

ধরুন আমাদের কাছে একটি নামী আইডি রয়েছে এমন একটি প্রাণী বস্তু রয়েছে যা একটি তালিকা সহ উপস্থাপিত হয়েছে animals। যদি আমরা তালিকা থেকে 'ও' যুক্ত সমস্ত প্রাণীর নাম পেতে চাই তবে আমরা animalsনীচের ক্যোয়ারীটি লিখতে পারি

from(animals).where("getName", contains("o")).all();

ব্লগ পোস্টে রেফারেন্সযুক্ত অন্য দুটি এপিআই রয়েছে: ল্যাম্বডজে এবং জে লিনক


1
আমি আশঙ্কা করছি যে ক্লাস সদস্যের খুব অস্তিত্বের স্থিতিশীল টাইপ চেকিং এবং চেক উভয়টি হারাতে চাইলে কলটির জন্য ফোন করার জন্য দামটি কিছুটা খাড়া where("getName", ...)
9000
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.