在这里,我try 使用lambda打印值.可以用双冒号的方式吗?

public class Occurance 
{
    static void occuranceUsingListSet()
    {
        ArrayList<String> listColors = new ArrayList<>(Arrays.asList("Red","blue","green","green"));
        Set<String> setVals = new LinkedHashSet<>(listColors);
        setVals.stream().forEach(s -> System.out.println(s + " : " + Collections.frequency(listColors, s)));
    }
    
}

setVals.stream().forEach(s -> System.out.println(s + " : " + Collections.frequency(listColors, s)));

有没有可能使用双冒号?

方法引用和按引用传递是否相同?

我可以看到这个双冒号是传递方法引用. 但在这个松懈的回答中,我可以看到在Java中没有通过引用传递这样的东西. https://stackoverflow.com/a/73021/11962586.

推荐答案

不,您不能用单个方法引用来完成整个操作.您在lambda中执行的不只是一个方法调用.

不过,如果将字符串创建重构为一个新函数,则可以使用方法引用来调用System.out.println:

static void occuranceUsingListSet() {
    // You don't need to wrap Arrays.asList in a new ArrayList.
    List<String> listColors = Arrays.asList("Red","blue","green","green");
    Set<String> setVals = new LinkedHashSet<>(listColors);

    setVals.stream()
        .map(s -> createFrequencyString(s, listColors);
        .forEach(System.out::println);
}

static String createFrequencyString(String color, List<String> colors) {
    return color + " : " + Collections.frequency(colors, color);
}

Java相关问答推荐

将Nimbus设置为计算机上运行的所有Java应用程序的默认外观

Java .类参数不通过构造函数传递

Java Swing:初始化身份验证类后未检测到ATM_Interface键事件

对于几乎不涉及逻辑的请求,您是否应该使用命令模式?

如何找到MongoDB文档并进行本地化?

为什么我的在一个范围内寻找素数的程序不能像S所期望的那样工作

Jakarta CDI强制bean构造/注册遗留事件侦听器

匹配一组字符或另一组字符

迁移到Java 17后,日期显示不准确

内存和硬盘中的Zip不同,这会导致下载后的Zip损坏

Dijkstra搜索算法的实现

try 使用预准备语句占位符获取信息时出现Try-With-Resources错误

如何处理两个几乎相同的XSD文件?

用于Java的Visual Studio代码完成不起作用

Java KeyListener不工作或被添加

获取所有可以处理Invent.ACTION_MEDIA_BUTTON Android 13 API33的Android包

模拟JUnit未检测到返回字符串的方法的任何声纳覆盖

如何在Spring Security中设置一个任何人都可以打开的主页?

将@Transactional添加到Spring框架中链下的每个方法会产生什么效果?

如何在更改分辨率时将鼠标坐标计算为世界坐标