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

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

如何在 Java 中映射數(shù)組?

如何在 Java 中映射數(shù)組?

www說 2021-09-29 15:02:07
我有一個(gè)字符串?dāng)?shù)組String[] suffixes = getSuffixes();我想要一個(gè)基于舊數(shù)組的新數(shù)組,并附加前綴。我會在 Ruby、JavaScript、Perl、Lisp 等中做這樣的事情:// pseudocode for what I would likeString[] full_words = suffixes.map(suffix => "re" + suffix);我的應(yīng)用程序中僅限于數(shù)組。(這是學(xué)校作業(yè)的一小部分,我不允許使用 Collections 庫。)在 Java 8 中有什么方法可以做到這一點(diǎn)?
查看完整描述

1 回答

?
慕桂英546537

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

String [] full_suffixes = Arrays.stream(suffixes)

                          .map(suffix -> "re" + suffix)

                          .toArray(size -> new String[size])

“老式”循環(huán)太冗長了:


String [] full_suffixes = new String[suffixes.length];

for(int i = 0; i < suffixes.length; i++) {

    full_suffixes[i] = "re" + suffixes[i];

}

要解決“太快”的評論:


import java.util.Arrays;


public class Test {

    static int N = 10000;

    public static void main(String [] args) throws Exception {

        if(args.length > 0) {

            N = Integer.parseInt(args[0]);

        }

        String [] array = new String[100000];

        for(int i = 0; i < array.length; i++) {

            array[i] = "abcdef" + i;

        }

        long start = System.currentTimeMillis();

        fancy(array);

        System.err.println("Fancy took " + (System.currentTimeMillis() - start) + "ms");

        start = System.currentTimeMillis();

        oldSchool(array);

        System.err.println("Loop took " + (System.currentTimeMillis() - start) + "ms");


    }


    public static void fancy(String [] array) {

        for(int i = 0; i < N; i++) {

            String [] full_suffixes = Arrays.stream(array)

                                          .map(suffix -> "re" + suffix)

                                          .toArray(size -> new String[size]);

        }

    }


    public static void oldSchool(String [] array) {

        for(int i = 0; i < N; i++) {

            String [] full_suffixes = new String[array.length];

            for(int j = 0; j < array.length; j++) {

                    full_suffixes[j] = "re" + array[j];

            }

        }

    }

}

運(yùn)行(jdk 1.8.0_60):


$ java Test 100

Fancy took 502ms

Loop took 398ms

$ java Test 1000

Fancy took 3067ms

Loop took 2227ms

$ java Test 5000

Fancy took 13288ms

Loop took 11494ms

$ java Test 10000

Fancy took 27744ms

Loop took 27446ms

我不會說這更快,但不幸的是,在當(dāng)前的流框架實(shí)現(xiàn)中,性能和代碼清晰度之間存在權(quán)衡。


編輯:為了解決關(guān)于 map 與 for 循環(huán)的討論——這與要輸入的行數(shù)或字符數(shù)無關(guān),也許我也被具有高階函數(shù)的語言所寵壞,但對我來說,轉(zhuǎn)換 a集合(這就是 map 的作用)并將我的大腦放入其大小以及如何獲取/分配元素的細(xì)節(jié)中。另外值得一提的是,Java 流框架仍然落后。


查看完整回答
反對 回復(fù) 2021-09-29
  • 1 回答
  • 0 關(guān)注
  • 250 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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