উত্তর:
মূলত আপনাকে "বর্তমানে সর্বাধিক পরিচিত সর্বাধিক" এবং এর সাথে সম্পর্কিত কী উভয়ই মনে রেখে মানচিত্রের প্রবেশ সেটটি নিয়ে পুনরাবৃত্তি করতে হবে। (অথবা কেবলমাত্র অবশ্যই উভয়ই এন্ট্রি রয়েছে))
উদাহরণ স্বরূপ:
Map.Entry<Foo, Bar> maxEntry = null;
for (Map.Entry<Foo, Bar> entry : map.entrySet())
{
if (maxEntry == null || entry.getValue().compareTo(maxEntry.getValue()) > 0)
{
maxEntry = entry;
}
}
max
একটি কাস্টম তুলকের সাথে ব্যবহার করা সম্ভবত সহজ হবে।
সম্পূর্ণতার জন্য, এখানে একটি জাভা-8 এটা করার উপায়
countMap.entrySet().stream().max((entry1, entry2) -> entry1.getValue() > entry2.getValue() ? 1 : -1).get().getKey();
অথবা
Collections.max(countMap.entrySet(), (entry1, entry2) -> entry1.getValue() - entry2.getValue()).getKey();
অথবা
Collections.max(countMap.entrySet(), Comparator.comparingInt(Map.Entry::getValue)).getKey();
(entry1, entry2) -> entry1.getValue() - entry2.getValue()
তুলনামূলক জন্য আরও কমপ্যাক্ট।
countMap.entrySet().stream().max((entry1, entry2) -> Integer.compare(entry1.getValue(), entry2.getValue())).get().getKey();
Map.Entry.comparingByValue()
পরিবর্তে ব্যবহার করতে পারেন
এই কোডটি সর্বাধিক মান সহ সমস্ত কী মুদ্রণ করবে
public class NewClass4 {
public static void main(String[] args)
{
HashMap<Integer,Integer>map=new HashMap<Integer, Integer>();
map.put(1, 50);
map.put(2, 60);
map.put(3, 30);
map.put(4, 60);
map.put(5, 60);
int maxValueInMap=(Collections.max(map.values())); // This will return max value in the Hashmap
for (Entry<Integer, Integer> entry : map.entrySet()) { // Itrate through hashmap
if (entry.getValue()==maxValueInMap) {
System.out.println(entry.getKey()); // Print the key with max value
}
}
}
}
জাভা -8 ব্যবহার করে একটি সাধারণ একটি লাইনার
Key key = Collections.max(map.entrySet(), Map.Entry.comparingByValue()).getKey();
String max_key = Collections.max(map.entrySet(), Map.Entry.comparingByValue()).getKey();
এখানে কিভাবে (একটি সুনির্দিষ্ট অতিরিক্ত লুপ ছাড়া) সরাসরি করবেন উপযুক্ত সংজ্ঞা দ্বারা এর Comparator
:
int keyOfMaxValue = Collections.max(
yourMap.entrySet(),
new Comparator<Entry<Double,Integer>>(){
@Override
public int compare(Entry<Integer, Integer> o1, Entry<Integer, Integer> o2) {
return o1.getValue() > o2.getValue()? 1:-1;
}
}).getKey();
সর্বোচ্চ মূল্য সহ সমস্ত কী পাওয়ার জন্য জাভা 8 উপায় Java
Integer max = PROVIDED_MAP.entrySet()
.stream()
.max((entry1, entry2) -> entry1.getValue() > entry2.getValue() ? 1 : -1)
.get()
.getValue();
List listOfMax = PROVIDED_MAP.entrySet()
.stream()
.filter(entry -> entry.getValue() == max)
.map(Map.Entry::getKey)
.collect(Collectors.toList());
System.out.println(listOfMax);
এছাড়াও আপনি এর parallelStream()
পরিবর্তে এটি ব্যবহার করে সমান্তরাল করতে পারেনstream()
আমার দুটি পদ্ধতি রয়েছে, সর্বাধিক মান সহ কীটি পেতে এই মোডথরটি ব্যবহার করে:
public static Entry<String, Integer> getMaxEntry(Map<String, Integer> map){
Entry<String, Integer> maxEntry = null;
Integer max = Collections.max(map.values());
for(Entry<String, Integer> entry : map.entrySet()) {
Integer value = entry.getValue();
if(null != value && max == value) {
maxEntry = entry;
}
}
return maxEntry;
}
উদাহরণ হিসাবে পদ্ধতিটি ব্যবহার করে সর্বাধিক মান সহ এন্ট্রি পান:
Map.Entry<String, Integer> maxEntry = getMaxEntry(map);
জাভা 8 ব্যবহার করে আমরা সর্বোচ্চ মান সম্বলিত একটি বস্তু পেতে পারি:
Object maxEntry = Collections.max(map.entrySet(), Map.Entry.comparingByValue()).getKey();
System.out.println("maxEntry = " + maxEntry);
1. স্ট্রিম ব্যবহার করে
public <K, V extends Comparable<V>> V maxUsingStreamAndLambda(Map<K, V> map) {
Optional<Entry<K, V>> maxEntry = map.entrySet()
.stream()
.max((Entry<K, V> e1, Entry<K, V> e2) -> e1.getValue()
.compareTo(e2.getValue())
);
return maxEntry.get().getKey();
}
2. একটি ল্যাম্বদা এক্সপ্রেশন সহ কালেকশন.ম্যাক্স () ব্যবহার করা
public <K, V extends Comparable<V>> V maxUsingCollectionsMaxAndLambda(Map<K, V> map) {
Entry<K, V> maxEntry = Collections.max(map.entrySet(), (Entry<K, V> e1, Entry<K, V> e2) -> e1.getValue()
.compareTo(e2.getValue()));
return maxEntry.getKey();
}
3. পদ্ধতি রেফারেন্স সহ স্ট্রিম ব্যবহার করে
public <K, V extends Comparable<V>> V maxUsingStreamAndMethodReference(Map<K, V> map) {
Optional<Entry<K, V>> maxEntry = map.entrySet()
.stream()
.max(Comparator.comparing(Map.Entry::getValue));
return maxEntry.get()
.getKey();
}
৪. কালেকশন.ম্যাক্স ব্যবহার করে ()
public <K, V extends Comparable<V>> V maxUsingCollectionsMax(Map<K, V> map) {
Entry<K, V> maxEntry = Collections.max(map.entrySet(), new Comparator<Entry<K, V>>() {
public int compare(Entry<K, V> e1, Entry<K, V> e2) {
return e1.getValue()
.compareTo(e2.getValue());
}
});
return maxEntry.getKey();
}
৫. সাধারণ আইট্রেশন ব্যবহার করা
public <K, V extends Comparable<V>> V maxUsingIteration(Map<K, V> map) {
Map.Entry<K, V> maxEntry = null;
for (Map.Entry<K, V> entry : map.entrySet()) {
if (maxEntry == null || entry.getValue()
.compareTo(maxEntry.getValue()) > 0) {
maxEntry = entry;
}
}
return maxEntry.getKey();
}
বুঝতে সহজ। কোডের নীচে ম্যাক্সকেই মূল কীটি সর্বাধিক মান ধারণ করে।
int maxKey = 0;
int maxValue = 0;
for(int i : birds.keySet())
{
if(birds.get(i) > maxValue)
{
maxKey = i;
maxValue = birds.get(i);
}
}
এই সমাধান কি ঠিক আছে?
int[] a = { 1, 2, 3, 4, 5, 6, 7, 7, 7, 7 };
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i : a) {
Integer count = map.get(i);
map.put(i, count != null ? count + 1 : 0);
}
Integer max = Collections.max(map.keySet());
System.out.println(max);
System.out.println(map);
মানচিত্রে সর্বাধিক উপাদান / সর্বাধিক উপাদান:
public class Main {
public static void main(String[] args) {
int[] a = {1,3,4,3,4,3,2,3,3,3,3,3};
List<Integer> list = Arrays.stream(a).boxed().collect(Collectors.toList());
Map<Integer, Long> map = list.parallelStream()
.collect(Collectors.groupingBy(Function.identity(),Collectors.counting()));
System.out.println("Map => " + map);
//{1=1, 2=1, 3=8, 4=2}
map.entrySet()
.stream()
.max(Comparator.comparing(Entry::getValue))//compare the values and get the maximum value
.map(Entry::getKey)// get the key appearing maximum number of times
.ifPresentOrElse(System.out::println,() -> new RuntimeException("no such thing"));
/*
* OUTPUT : Map => {1=1, 2=1, 3=8, 4=2}
* 3
*/
// or in this way
System.out.println(".............");
Integer maxAppearedElement = map.entrySet()
.parallelStream()
.max(Comparator.comparing(Entry::getValue))
.map(Entry::getKey)
.get();
System.out.println(maxAppearedElement);
}
}
প্রদত্ত মানচিত্র
হ্যাশম্যাপ abc = নতুন হ্যাশম্যাপ <> ();
সর্বাধিক মান সহ সমস্ত মানচিত্রের এন্ট্রি পান।
আপনি ন্যূনতম বা সর্বাধিক মানগুলির সেটগুলির জন্য সংশ্লিষ্ট মানচিত্রের এন্ট্রিগুলি পেতে ফিল্টারটিতে নীচের যে কোনও পদ্ধতি ব্যবহার করতে পারেন
Collections.max(abc.values())
Collections.min(abc.values())
Collections.max(abc.keys())
Collections.max(abc.keys())
abc.entrySet().stream().filter(entry -> entry.getValue() == Collections.max(abc.values()))
যদি কেবলমাত্র ফিল্টার মানচিত্রের কীগুলি পেতে চান
abc.entrySet()
.stream()
.filter(entry -> entry.getValue() == Collections.max(abc.values()))
.map(Map.Entry::getKey);
আপনি যদি ফিল্টারকৃত মানচিত্রের মান পেতে চান
abc.entrySet()
.stream()
.filter(entry -> entry.getValue() == Collections.max(abc.values()))
.map(Map.Entry::getvalue)
আপনি যদি তালিকায় এই জাতীয় কীগুলি পেতে চান:
abc.entrySet()
.stream()
.filter(entry -> entry.getValue() == Collections.max(abc.values()))
.map(Map.Entry::getKey)
.collect(Collectors.toList())
আপনি যদি একটি তালিকায় এই জাতীয় মান পেতে চান:
abc.entrySet()
.stream()
.filter(entry -> entry.getValue() == Collections.max(abc.values()))
.map(Map.Entry::getvalue)
.collect(Collectors.toList())
আমার প্রকল্পের জন্য, আমি জোনস এবং ফাতাহার সমাধানটির কিছুটা পরিবর্তিত সংস্করণ ব্যবহার করেছি। একই মান সহ একাধিক এন্ট্রিগুলির ক্ষেত্রে এটি এটি খুঁজে পাওয়া শেষ এন্ট্রি প্রদান করে:
public static Entry<String, Integer> getMaxEntry(Map<String, Integer> map) {
Entry<String, Integer> maxEntry = null;
Integer max = Collections.max(map.values());
for(Entry<String, Integer> entry : map.entrySet()) {
Integer value = entry.getValue();
if(null != value && max == value) {
maxEntry = entry;
}
}
return maxEntry;
}
int maxValue = 0;
int mKey = 0;
for(Integer key: map.keySet()){
if(map.get(key) > maxValue){
maxValue = map.get(key);
mKey = key;
}
}
System.out.println("Max Value " + maxValue + " is associated with " + mKey + " key");
আপনি এটা করতে পারেন
HashMap<Integer,Integer> hm = new HashMap<Integer,Integer>();
hm.put(1,10);
hm.put(2,45);
hm.put(3,100);
Iterator<Integer> it = hm.keySet().iterator();
Integer fk = it.next();
Integer max = hm.get(fk);
while(it.hasNext()) {
Integer k = it.next();
Integer val = hm.get(k);
if (val > max){
max = val;
fk=k;
}
}
System.out.println("Max Value "+max+" is associated with "+fk+" key");