簡體   English   中英

有沒有更好的方法在 Java - Random Generator 中編寫此方法

[英]Is there a better way to write this method in Java - Random Generator

我有這個方法可以接收一組微調器值。 它采用這些值並將它們添加到具有 9 個隨機數字的前綴中。

到目前為止,我有很多前綴 go 以及每個微調器值。

每個值都在檢查它是否大於 0,循環遍歷值的數量,然后添加前綴 + 9 位。 例如,R1 微調器值 = 10,然后用 R1+9DIGITS 吐出一個數組 10 次

有很多 if 語句,我相信會有更好的方法。 您可以在下面看到其極其重復的內容。 任何幫助或想法將不勝感激。 謝謝!

    Spinner<Integer>[] spinners = new Spinner[]{
                r1Spinner, r2Spinner, r3Spinner, r5Spinner, rd2Spinner, rd8Spinner,m1Spinner,gSpinner, srSpinner, lcSpinner, singleURNSpinner,
                customPrefixSpinner, prefixSpinner};

     public static String[] randomPrefixGenerator(int[] values){

        int R1 = values[0];
        int R2 = values[1];
        int R3 = values[2];
        int R5 = values[3];
        int RD2 = values[4];
        int RD8 = values[5];
        int M1 = values[6];
        int G = values[7];
        int SR = values[8];
        int LC = values[9];

        String[] urnR1 = new String[R1];
        String[] urnR2 = new String[R2];
        String[] urnR3 = new String[R3];
        String[] urnR5 = new String[R5];
        String[] urnRD2 = new String[RD2];
        String[] urnRD8 = new String[RD8];
        String[] urnG = new String[G];
        String[] urnM1 = new String[M1];
        String[] urnLC = new String[LC];
        String[] urnSR = new String[SR];

        if (R1 >= 0){
            for (int i = 0; i < R1 ; i++) {
                urnR1[i] = "R1" + random9digits();
            }
        }
        if (R2 >= 0){
            for (int i = 0; i < R2 ; i++) {
                urnR2[i] = "R2" + random9digits();
            }
        }
        if (R3 >= 0){
            for (int i = 0; i < R3 ; i++) {
                urnR3[i] = "R3" + random9digits();
            }
        }
        if (R5 >= 0){
            for (int i = 0; i < R5 ; i++) {
                urnR5[i] = "R5" + random9digits();
            }
        }
        if (RD2 >= 0){
            for (int i = 0; i < RD2 ; i++) {
                urnRD2[i] = "RD2" + random9digits();
            }
        }
        if (RD8 >= 0){
            for (int i = 0; i < RD8 ; i++) {
                urnRD8[i] = "RD8" + random9digits();
            }
        }
        if (M1 >= 0){
            for (int i = 0; i < M1 ; i++) {
                urnM1[i] = "M1" + random9digits();
            }
        }
        if (G >= 0){
            for (int i = 0; i < G ; i++) {
                urnG[i] = "G" + random9digits();
            }
        }
        if (LC >= 0){
            for (int i = 0; i < LC ; i++) {
                urnLC[i] = "LC" + random9digits();
            }
        }
        if (SR >= 0){
            for (int i = 0; i < SR ; i++) {
                urnSR[i] = "SR" + random9digits();
            }
        }
        return Arrays.stream(mergeArray(urnR1,urnR2, urnR3,urnR5, urnRD2, urnRD8, urnG, urnM1, urnLC, urnSR)).toArray(String[]::new);
    }

更新

我最終想到了一個解決方案。


private static String[] urnCounter(String[] urns){
        String[] urnsProcessed = new String[Integer.parseInt(urns[0])];

            if (Integer.parseInt(urns[0]) >= 0){
                for (int j = 0; j < Integer.parseInt(urns[0]); j++) {
                    urnsProcessed[j] = urns[1] + random9Digits();
                }
            }
        return urnsProcessed;
    }
    public static String[] randomURNGenerator1(int[] values){

        String[] urnR1 = urnCounter(new String[]{String.valueOf(values[0]),"R1"});
        String[] urnR2 = urnCounter(new String[]{String.valueOf(values[1]),"R2"});
        String[] urnR3 = urnCounter(new String[]{String.valueOf(values[2]),"R3"});
        String[] urnR5 = urnCounter(new String[]{String.valueOf(values[3]),"R5"});
        String[] urnRD2 = urnCounter(new String[]{String.valueOf(values[4]),"RD2"});
        String[] urnRD8 = urnCounter(new String[]{String.valueOf(values[5]),"RD8"});
        String[] urnG = urnCounter(new String[]{String.valueOf(values[7]),"G"});
        String[] urnM1 = urnCounter(new String[]{String.valueOf(values[6]),"M1"});
        String[] urnLC = urnCounter(new String[]{String.valueOf(values[9]),"LC"});
        String[] urnSR = urnCounter(new String[]{String.valueOf(values[8]),"SR"});

        return Arrays.stream(mergeArray(urnR1,urnR2, urnR3,urnR5, urnRD2, urnRD8, urnG, urnM1, urnLC, urnSR)).toArray(String[]::new);
    }
    // function to merge two arrays
    @SafeVarargs
    public static <T> Object[] mergeArray(T[]... arr) {
        Object[] array = Stream.of().flatMap(Stream::of).toArray();
        for(T[] passedObject: arr){
            array = Stream.of(array, passedObject).flatMap(Stream::of).toArray(String[]::new);
        }
        return array;
    }

我不知道合並 arrays function 做了什么。 但我認為您可以使用以下代碼稍微優化您的代碼:

public static String[] randomPrefixGenerator(int[] values) {
        
        // we can use a map to retrieve your prefixes by their index
        Map<Integer, String> prefixNameByIndex = Map.of(
                0, "R1",
                1, "R2",
                2, "R3",
                3, "R5",
                4, "RD2",
                5, "RD8",
                6, "M1",
                7, "G",
                8, "SR",
                9, "LC"
        );
        
        // this stream goes through value 0 to 9
        return IntStream.rangeClosed(0, 9)
                // we need objects for the flatmap to work
                .boxed()
                // flatmap so we get a singe list of strings
                .flatMap(generatePrefixNamesForIndex(values, prefixNameByIndex))
                .collect(Collectors.toList())
                // the to array call as last
                .toArray(String[]::new);
        
}

private static Function<Integer, Stream<? extends String>> generatePrefixNamesForIndex(int[] values, Map<Integer, String> prefixNameByIndex) {
        return index -> {
            // we can retrieve the prefix from the map by its index
            var prefixValue = prefixNameByIndex.get(index);
            // retrieve te number of iterations from parameters given in the method call
            return IntStream.range(0, values[index])
                    .mapToObj(i -> prefixValue + random9digits());
        };
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM