কীভাবে একটি ভারাইজ পদ্ধতি প্যারামিটারে অ্যারেলিস্ট পাস করবেন?


236

মূলত আমার কাছে অবস্থানগুলির একটি অ্যারেলিস্ট রয়েছে:

ArrayList<WorldLocation> locations = new ArrayList<WorldLocation>();

এর নীচে আমি নিম্নলিখিত পদ্ধতিটি কল করি:

.getMap();

getMap () পদ্ধতিতে প্যারামিটারগুলি হ'ল:

getMap(WorldLocation... locations)

আমার যে সমস্যাটি হচ্ছে তা হ'ল আমি নিশ্চিত না যে কীভাবে locationsএই পদ্ধতিতে পুরো তালিকাতে পাস করতে হয় ।

আমি চেষ্টা করেছিলাম

.getMap(locations.toArray())

তবে গেটম্যাপ সেটি গ্রহণ করে না কারণ এটি অবজেক্টগুলি [] গ্রহণ করে না।

এখন যদি আমি ব্যবহার করি

.getMap(locations.get(0));

এটি নিখুঁতভাবে কাজ করবে ... তবে আমার কোনও একসাথে সমস্ত অবস্থানের পাস করা দরকার ... আমি অবশ্যই যোগ করা locations.get(1), locations.get(2)ইত্যাদি করতে পারি তবে অ্যারের আকার পরিবর্তিত হয়। আমি শুধু একটি সম্পূর্ণ ধারণা ব্যবহার করতে পারছি নাArrayList

এটি সম্পর্কে সবচেয়ে সহজ উপায় কি হবে? আমার মনে হচ্ছে আমি এখনই সোজা চিন্তা করছি না।


উত্তর:


340

উত্স নিবন্ধ: একটি ভারার্গ পদ্ধতিতে যুক্তি হিসাবে একটি তালিকা পাস করা


toArray(T[] arr)পদ্ধতিটি ব্যবহার করুন ।

.getMap(locations.toArray(new WorldLocation[locations.size()]))

( toArray(new WorldLocation[0])এছাড়াও কাজ করে তবে আপনি বিনা কারণে শূন্য দৈর্ঘ্যের অ্যারে বরাদ্দ করবেন))


এখানে একটি সম্পূর্ণ উদাহরণ:

public static void method(String... strs) {
    for (String s : strs)
        System.out.println(s);
}

...
    List<String> strs = new ArrayList<String>();
    strs.add("hello");
    strs.add("wordld");

    method(strs.toArray(new String[strs.size()]));
    //     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...

1
স্মৃতি ও গতির দিক থেকে এই অপারেশনটি কত ব্যয়বহুল হবে?
লেখক

যদি আরও টেম্পলেট জড়িত থাকে তবে এটি কোনও সতর্কতা ছাড়াই কাজ করবে না। উদাহরণস্বরূপ someMethod(someList.toArray(new ArrayList<Something>[someList.size()]))আপনাকে একটি সতর্কতা দেবে যা খুব বিরক্তিকর যদি ফাংশনটি কয়েক লাইনের বেশি দীর্ঘ হয় (কারণ আপনি পুরো ফাংশনের জন্য এটি চাপতে পারেন বা আপনাকে একটি অতিরিক্ত পদক্ষেপে অ্যারে তৈরি করতে হবে এবং ভেরিয়েবলের উপর সতর্কতাটি দমন করতে হবে এটি সঞ্চয় করুন
Qw3ry

23
স্পষ্টতই দ্রুততম পদ্ধতির অ্যারের আকারের চেয়ে শূন্যের আকার দিচ্ছে। সংক্ষেপে, এটি কারণ কারণ সংকলন-সময় ধ্রুবক একটি অনুকূলিত পদ্ধতির ব্যবহার সক্ষম করে। শিপাইলভ.নেট.ব্লগ
২০১6 /

2
@JoshM। জাভা অনেক জিনিস প্রয়োজন। ;) আমিও (সি # ব্যাকগ্রাউন্ড থেকে আসছি) মিস ইনডেক্স অপারেটরগুলি। জাভাতে হ্যাশম্যাপসের সাথে কাজ করার চেয়ে অভিধানে কাজ করা সি # তে অনেক বেশি মসৃণ।
প্রতি লন্ডবার্গ

@ পেরলন্ডবার্গ - সম্পূর্ণরূপে একমত এছাড়াও একটি প্রাথমিকভাবে সি # বিকাশকারী বর্তমানে ডাব্লু / জাভা 8 কাজ করছে। সম্ভবত 10/11 ভাল হবে। :
জোশ এম


12

পেয়ারা ব্যবহার করে গৃহীত উত্তরের একটি সংক্ষিপ্ত সংস্করণ:

.getMap(Iterables.toArray(locations, WorldLocation.class));

স্থিতিশীলভাবে অ্যারেতে আমদানি করে আরও ছোট করা যায়:

import static com.google.common.collect.toArray;
// ...

    .getMap(toArray(locations, WorldLocation.class));

1

আপনি করতে পারেন:

getMap(locations.toArray(new WorldLocation[locations.size()]));

অথবা

getMap(locations.toArray(new WorldLocation[0]));

অথবা

getMap(new WorldLocation[locations.size()]);

@SuppressWarnings("unchecked") আদর্শ সতর্কতা অপসারণ করতে প্রয়োজন।


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