使用lambda表达式遇到问题的解决思路

来源:爱站网时间:2022-06-20编辑:网友分享
在java编程中,使用lambda表达式的时候出现字母排序问题怎么解决比较好呢?为了帮助大家,爱站技术频道小编在此整理了以下相关资料,感兴趣的小伙伴一定不要错过这篇文章。

问题描述


我在按单词的出现次数对单词的字母进行排序时遇到问题,如果字母出现的次数相同,则至少在字典上将其排序。我有一个代码,但在站点上却得到了编译错误,并且得到0分,因为它们使用的是Java 7,而且我不知道如何在没有“ lambda”的情况下解决问题的最后一部分。

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.*;
    public class prog {
        public static void main(String[] args) throws IOException {
           String testString = " ";
           BufferedReader rd = new BufferedReader(new 
                 InputStreamReader(System.in));
           testString = rd.readLine();
           Map> map = new HashMap();
           for (int i = 0; i  characters = 
                   map.getOrDefault(Character.toLowerCase(ch), new ArrayList());
               characters.add(ch);
               map.put(Character.toLowerCase(ch), characters);
           }
           List>> list =
                new ArrayList(map.entrySet());

           list.sort((o1, o2) -> {
                 if (o1.getValue().size() == o2.getValue().size()) {
                     return o1.getKey() - o2.getKey();
                 }
                 return o2.getValue().size() - o1.getValue().size();
            });
            list.forEach(entry -> entry.getValue().forEach(System.out::print));
       }
    }

思路一:


您可以使用Collections.sort(List list, Comparator super T> c)

Collections.sort(list, new Comparator>>() {
    @Override
    public int compare(Map.Entry> o1, Map.Entry> o2) {
        if (o1.getValue().size() == o2.getValue().size()) {
            return o1.getKey() - o2.getKey();
        }
        return o2.getValue().size() - o1.getValue().size();
    }
});

for (Map.Entry> characterListEntry : list) {
    System.out.println(characterListEntry);
}

Map#getOrDefault(Object key, V defaultValue)也是Java 8中引入的。您需要将其更改为类似的内容:

char cKey = Character.toLowerCase(ch);
List characters = map.containsKey(cKey) ? map.get(cKey) : new ArrayList();

思路二:


对于这样的事情,我更喜欢写local classes来处理。另外,它们比匿名类还干净,但确实需要其他语法。如果您不熟悉这些内容,它将放在您的主类中。


    static class CountThenLex implements Comparator >> {
        public int compare(
            Entry > a,
            Entry > b) {
            int asize = a.getValue().size();
            int bsize = b.getValue().size();
            // note that b is sorted first for descending count order.

            int aTob = bsize > asize ? 1 :
                bsize 

然后,您仅使用类的实例调用sort。

    Collections.sort(list, new CountThenLex());

由于还存在其他Java 8功能,因此您还必须修改打印方法以及其他方法。这是基本的打印解决方案。

    for(Entry,List> e : list) {
        for (char c : e.getValue()) {
            System.out.print(c);
        }
    }
    System.out.println();

使用lambda表达式遇到问题的解决思路不知道小伙伴们都看清楚了没有,关注爱站技术频道网站,每天带你了解更多不一样的技术文章知识点。

上一篇:怎么查看Java Swing绘制的线条

下一篇:ssh服务器怎么实现自动安装jar项目程序

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载