'->' তীর অপারেটর জাভাতে কী করে?


170

কিছু কোডের মাধ্যমে শিকার করার সময় আমি তীর অপারেটর জুড়ে এসেছিলাম, এটি ঠিক কী করে? আমি ভেবেছিলাম জাভাতে কোনও তীর অপারেটর নেই।

return (Collection<Car>) CollectionUtils.select(listOfCars, (arg0) -> {
        return Car.SEDAN == ((Car)arg0).getStyle();
});

বিশদ : জাভা 6, অ্যাপাচি কমন্স সংগ্রহ, ইন্টেলিজিজ 12

আপডেট / উত্তর: দেখা যাচ্ছে যে ইন্টেলিজ 12 জাভা 8 সমর্থন করে যা ল্যাম্বডাসকে সমর্থন করে এবং "ভাঁজ" করে ভবিষ্যদ্বাণী করে এবং ল্যাম্বডাস হিসাবে তাদের প্রদর্শন করছে। নীচে "আন-ভাঁজ" কোডটি রয়েছে।

return (Collection<Car>) CollectionUtils.select(listOfCars, new Predicate() {
    public boolean evaluate(Object arg0) {
        return Car.SEDAN == ((Car)arg0).getStyle();
    }
});

5
নোট করুন যে সঠিক পরিস্থিতিটি ইন্টেলিজ রয়েছে যা বিদ্যমান কোডটি লম্বা এক্সপ্রেশন হিসাবে রেন্ডারিং করে যাতে এটি আরও সহজে পড়া যায়। আসল কোড ল্যাম্বডা এক্সপ্রেশন নয়।
থরবজর্ন রাভন অ্যান্ডারসন

উত্তর:


125

নতুন ল্যামডা অভিব্যক্তির সিনট্যাক্স, এর অংশ জাভা 8. চালু করা আছে, এখানে একটি ব্যাপার অনলাইন গাইডের দুয়েক তা পেতে আসে করছে লিংক এক। মূলত, ->প্যারামিটারগুলি (বাম দিকে) বাস্তবায়ন (ডান পাশ) থেকে পৃথক করে।

ল্যাম্বডা এক্সপ্রেশন ব্যবহার করার জন্য সাধারণ বাক্য গঠন

(পরামিতি) -> {দেহ} যেখানে '->' প্যারামিটার এবং ল্যাম্বডা এক্সপ্রেশন বডি পৃথক করে।

প্যারামিটারগুলি বন্ধনীতে আবদ্ধ থাকে যা পদ্ধতিগুলির জন্য একইভাবে এবং ল্যাম্বডা এক্সপ্রেশন বডিটি বন্ধনীগুলির সাথে সংযুক্ত কোডের একটি ব্লক।


10
ওডি জেডিকে using ব্যবহার করে, সুতরাং এটি নীচে @ এন্টম উত্তর অনুসারে কেবলমাত্র ইন্টেলিজ জালিং কোড
সান ল্যান্ডসম্যান

6
@ সানল্যান্ডসমান ওপি জাভা using ব্যবহার করতে পারে তবে প্রশ্নে তিনি বলেছিলেন যে তিনি অন্য কোথাও সেই কোডটি পেরিয়ে এসেছিলেন। কেন IntelliJ একটি ত্রুটি, একটা রহস্য যে প্রতিবেদন করা হচ্ছে না হিসেবে (সম্ভবত সেখানে হয় একটি জাভা 7 সংস্করণ ওপি সিস্টেম কোথাও ইনস্টল করা)। তবে এটি জাভাতে ল্যাম্বডা এক্সপ্রেশনটির বাক্য গঠন, এটি সম্পর্কে কোনও প্রশ্ন নেই।
এসকর লোপেজ

37

আপনি যখন একটি কার্যকরী ইন্টারফেস বাস্তবায়ন করতে চান তখন এইটিও কার্যকর

Runnable r = ()-> System.out.print("Run method");

সমতুল্য

Runnable r = new Runnable() {
            @Override
            public void run() {
                System.out.print("Run method");
            }
        };

কেন এই বৈশিষ্ট্য সরবরাহ করা হয়?
আকাইস্টেফ

1
@ আকাইস্টেফ 7 যখন আপনি কোনও পদ্ধতি সংজ্ঞায়িত করতে চান না কারণ আপনি দেখতে পান যে কেবলমাত্র একজন কলার সেই পদ্ধতিটিকে কল করতে চলেছেন। এই ক্ষেত্রে এটি পৃথক স্থানে পদ্ধতিটি সংজ্ঞায়িত না করে বরং পদ্ধতিটির শরীরে পাস করা, লাম্বদা অনুসরণকারী বেনামি পদ্ধতি সম্পর্কে পড়ার অর্থ রয়েছে sense
বিবেক শুক্লা

30

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


36
@ ডেভিডকনরড না, এটি ভুল নয়। ইন্টেলিজ ল্যাম্বডাসের মতো দেখতে কার্যকরী ইন্টারফেসগুলির ইনলাইন বাস্তবায়নগুলি ভাঁজ করে।
বাল্ফা

12
প্রশ্নটি দেখুন: "বিশদ: জাভা 6, অ্যাপাচি কমন্স সংগ্রহ, ইন্টেলিজিজ 12" জাবা 6 এ ল্যাম্বদা ???
আন্তন-এম

13

এটি ল্যাম্বডা এক্সপ্রেশন।

এর অর্থ হ'ল, তালিকার অফকার্স থেকে, আরগ0 that তালিকার আইটেমগুলির মধ্যে একটি। সেই আইটেমটি দিয়ে তিনি যাচ্ছেন, তাই -> বন্ধনীগুলির ভিতরে যা কিছু আছে।

এই উদাহরণস্বরূপ, তিনি শর্ত অনুসারে গাড়ির তালিকা ফিরিয়ে দিতে যাচ্ছেন

Car.SEDAN == ((Car)arg0).getStyle();

2

জাভা 8 এ ল্যাম্বডা এক্সপ্রেশনের জন্য নতুন অপারেটর

ল্যাম্বডা এক্সপ্রেশন পদ্ধতি পদ্ধতি রচনার স্বল্প উপায় way
এটি অপ্রত্যক্ষভাবে কার্যকরী ইন্টারফেস প্রয়োগ করতে ব্যবহৃত হয়

প্রাথমিক সিনট্যাক্স: (পরামিতি) -> {বিবৃতি; }

কার্যকর ল্যাম্বদা এক্সপ্রেশন রাইটিংয়ের জন্য কিছু প্রাথমিক নিয়ম রয়েছে যা আপনার জানা উচিত।

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