第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Java8 流:流中的通用記錄器方法

Java8 流:流中的通用記錄器方法

開(kāi)心每一天1111 2023-05-17 14:56:48
我想創(chuàng)建一種打印流中信息的方法。請(qǐng)看看我現(xiàn)有的記錄器方法。方法參數(shù)必須像我的示例字符串和整數(shù)一樣是通用的。該方法應(yīng)該返回原始對(duì)象,在我的例子中是字符串。有人能告訴我我目前的方法有什么問(wèn)題嗎?非常感謝!查看記錄器方法Stream<String> stream = Stream.of("A", "BC", "XYZ");stream.map(t -> logger(t.length()))   .map(t-> logger(t.substring(0, 2)))   .collection(Collectors.toList());public static <T> T logger(T t) {    System.out.println(t);    return t;  }錯(cuò)誤:無(wú)法推斷 map(Function) 的類型參數(shù)
查看完整描述

3 回答

?
慕哥6287543

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊

為什么不使用 Stream#peek()?

.peek()這看起來(lái)像是您可能想要使用而不是地圖的示例。它專為打印而設(shè)計(jì),您無(wú)需擔(dān)心退回任何東西!


它可能看起來(lái)更像:


stream.peek(it -> System.out.println(it.length))

    .peek(it -> System.out.println(it.substring(0, 2))

    // presumably other functions here before collecting...

    .collect(Collectors.toList());

在此處查看官方文檔:https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#peek-java.util.function.Consumer-


回到最初的問(wèn)題

為了解決您之前的問(wèn)題,您可能想要更新您的函數(shù),以便它采用 T 的純示例和 T 的轉(zhuǎn)換。您可以將其更新為如下所示:


public static <T, R> T logger(T t, Function<T, R> transform) {

  R logLine = transform.apply(t);

  System.out.println(logLine);

  return t;

}

你的代碼看起來(lái)像


stream.map(element -> logger(element, element::length)) // and so on


查看完整回答
反對(duì) 回復(fù) 2023-05-17
?
阿晨1998

TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊

我在這里面臨的問(wèn)題是第一個(gè)地圖返回一個(gè)整數(shù),所以你試圖使用Integer.substring不存在的。


我在你的情況下推薦的是使用peek而不是map https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#peek-java.util.function.Consumer-


import java.util.stream.Collectors;

import java.util.stream.Stream;


public class InferType {

    public static void main(String[] args) {

        Stream<String> stream = Stream.of("A", "BC", "XYZ");


        stream.peek(t -> logger(t.length()))

                .peek(t-> logger(t.substring(0, 2)))

                .collect(Collectors.toList());

    }


    public static <T> void logger(T t) {

        System.out.println(t);

    }


}


查看完整回答
反對(duì) 回復(fù) 2023-05-17
?
有只小跳蛙

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個(gè)贊

這對(duì)我有用


import java.util.stream.*;


class Main {

? public static void main(String[] args) {

? ? Stream<String> stream = Stream.of("AX", "BC", "XYZ");



? ? stream.map(t -> logger(t))

? ? ? .map(t-> logger(t.substring(0, 1)))

? ? ? .collect(Collectors.toList());


? ? /* or this

? ? stream.map(t -> logger(t))

? ? ? .collect(Collectors.toList());

? ? */


? }


public static <T> T logger(T t) {

? ? System.out.println(t);

? ? return t;

? }

}

在此處查看 stream() map() 的真正作用。但基本上,它說(shuō)


Stream map(Function mapper) 返回一個(gè)流,該流由將 > 給定函數(shù)應(yīng)用于此流的元素的結(jié)果組成。


查看完整回答
反對(duì) 回復(fù) 2023-05-17
  • 3 回答
  • 0 關(guān)注
  • 183 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)