1. Java / Говнокод #26816

    0

    1. 1
    про свинг

    песня про это дело

    MAKAKA, 24 Июля 2020

    Комментарии (32)
  2. Java / Говнокод #26808

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    import java.util.concurrent.TimeUnit;
    import java.util.regex.Pattern;
    import static java.lang.System.*;
    import static java.util.concurrent.TimeUnit.NANOSECONDS;
    
    public class Rep implements CharSequence
    {
        String str = null;
        int    len;
        char  base;
    
        public Rep(char x, int count)
        {
            this.len  = count;
            this.base = x;
        }
    
        @Override
        public int length()
        {
            return len;
        }
    
        @Override
        public char charAt(int index)
        {
            return base;
        }
    
        @Override
        public CharSequence subSequence(int beginIndex, int endIndex)
        {
            if (beginIndex < 0) {
                throw new StringIndexOutOfBoundsException(beginIndex);
            }
            if (endIndex > this.len) {
                throw new StringIndexOutOfBoundsException(endIndex);
            }
            int subLen = endIndex - beginIndex;
            if (subLen < 0) {
                throw new StringIndexOutOfBoundsException(subLen);
            }
            return ((beginIndex == 0) && (endIndex == this.len)) ? this
                    : new Rep(this.base, subLen);
        }
    
        @Override
        public String toString()
        {
            return null!=str ?  str : (this.str  = new String(new char[]{base}).repeat(len));
        }
    
        public static void main(String... args)
        {
            long ns = 0L;
            Pattern lazy   = Pattern.compile("^(11+?)\\1+$");
            Pattern greedy = Pattern.compile("^(11+?)\\1+$");
            ns=nanoTime();  lazy  .matcher(new Rep('1',100160079)).matches(); out.println( NANOSECONDS.toMillis(nanoTime()-ns));
            ns=nanoTime();  greedy.matcher(new Rep('1',100160079)).matches();out.println( NANOSECONDS.toMillis(nanoTime()-ns));
            ns=nanoTime();  greedy.matcher(new Rep('1',1165139)).matches();out.println( NANOSECONDS.toMillis(nanoTime()-ns));
    
            ns=nanoTime(); "1".repeat( 100160079 ).matches("^(11+?)\\1+$") ; out.println("Lazy String:"+ NANOSECONDS.toMillis(nanoTime()-ns));
            ns=nanoTime(); "1".repeat( 100160079 ).matches("^(11+)\\1+$") ; out.println("Greedy String:"+ NANOSECONDS.toMillis(nanoTime()-ns)); 
        }
    
    }

    Так как в «Йажа» регулярки работают не на строках, а на интерфейсе CharSequence https://docs.oracle.com/javase/8/docs/api/index.html?java/lang/CharSequence.html

    Решил что можно сделать тупую реализацию CharSequence для строк из повторяющегося символа.

    https://ideone.com/8eYFU7

    3.14159265, 16 Июля 2020

    Комментарии (81)
  3. Java / Говнокод #26797

    +2

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    List<UserScoreDTO> userScores = users.stream()
                    .map((u) -> ScoreUtils.aggregateUserAndFlagData(u, maxTestScore))
                    .collect(toList());
    
    return userScores.stream();

    Collect to List<UserScoreDTO> then stream the list to Stream<UserScoreDTO>

    johann, 08 Июля 2020

    Комментарии (4)
  4. Java / Говнокод #26796

    0

    1. 1
    2. 2
    IntStream.range(1, userScores.size() + 1)
                    .forEach(position -> userScores.get(position - 1).setPosition(position));

    Converting from 0 based array to 1 based array (for some reason).

    johann, 08 Июля 2020

    Комментарии (0)
  5. Java / Говнокод #26791

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    package literatePrimes;
    
    import java.util.ArrayList;
    
    public class PrimeGenerator {
      private static int[] primes;
      private static ArrayList<Integer> multiplesOfPrimeFactors;
    
      protected static int[] generate(int n) {
        primes = new int[n];
        multiplesOfPrimeFactors = new ArrayList<Integer>();
        set2AsFirstPrime();
        checkOddNumbersForSubsequentPrimes();
        return primes;
      }
    
      private static void set2AsFirstPrime() {
        primes[0] = 2;
        multiplesOfPrimeFactors.add(2);
      }
    
      private static void checkOddNumbersForSubsequentPrimes() {
        int primeIndex = 1;
        for (int candidate = 3;
             primeIndex < primes.length;
             candidate += 2) {
          if (isPrime(candidate))
            primes[primeIndex++] = candidate;
        }
      }
    
      private static boolean isPrime(int candidate) {
        if (isLeastRelevantMultipleOfNextLargerPrimeFactor(candidate)) {
          multiplesOfPrimeFactors.add(candidate);
          return false;
        }
        return isNotMultipleOfAnyPreviousPrimeFactor(candidate);
      }
    
      private static boolean
      isLeastRelevantMultipleOfNextLargerPrimeFactor(int candidate) {
        int nextLargerPrimeFactor = primes[multiplesOfPrimeFactors.size()];
        int leastRelevantMultiple = nextLargerPrimeFactor * nextLargerPrimeFactor;
        return candidate == leastRelevantMultiple;
      }
    
      private static boolean
      isNotMultipleOfAnyPreviousPrimeFactor(int candidate) {
        for (int n = 1; n < multiplesOfPrimeFactors.size(); n++) {
          if (isMultipleOfNthPrimeFactor(candidate, n))
            return false;
        }
        return true;
      }
    
      private static boolean
      isMultipleOfNthPrimeFactor(int candidate, int n) {
       return
         candidate == smallestOddNthMultipleNotLessThanCandidate(candidate, n);
      }
    
      private static int
      smallestOddNthMultipleNotLessThanCandidate(int candidate, int n) {
        int multiple = multiplesOfPrimeFactors.get(n);
        while (multiple < candidate)
          multiple += 2 * primes[n];
        multiplesOfPrimeFactors.set(n, multiple);
        return multiple;
      }
    }

    https://habr.com/ru/post/508876/
    Вероятно, хватит рекомендовать «Чистый код»
    > Я остановлюсь на ещё одном вопиющем примере кода. Это генератор простых чисел из главы 8:

    gost, 03 Июля 2020

    Комментарии (351)
  6. Java / Говнокод #26712

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    class Values<T> {
       T data;
       Values() {}
       Values(T data) {this.setData(data);}
       public void setData(T data) {this.data = data;}
       public T getData() {return this.data;}
    }
    
    public class Main {
       public static void main(String[] args) {
          Values[][] item = new Values[3][2];
          item[0][0] = new Values("grapes");
          item[0][1] = new Values(1);
    
          item[1][0] = new Values("apples");
          item[1][1] = new Values(1);
    
          item[2][0] = new Values("peaches");
          item[2][1] = new Values(1);
       }
    }

    >>> кто меня интервьюировал на позицию Staff Engineer? Junior?
    >>>

    1. Если покупатель купит больше одного яблока,
    то он получит скидку 20% на все яблоки в корзине;
    2. Если покупатель купит пакет винограда, то второй пакет
    он получит бесплатно.

    Итог: посчитать стоимость корзины покупателя при выходе из магазина,
    при то, что данные даны в следующем виде:
    [["grapes", 1],["apples", 0],["peaches", 1]] => 12
    [["grapes", 1],["apples", 1],["peaches", 1]] => 15 ...

    https://habr.com/post/504638

    Бля-я-я-я, это просто феерия! 1024--, зацени статью, ты оценишь!

    gost, 31 Мая 2020

    Комментарии (281)
  7. Java / Говнокод #26601

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    private String getStringDelimitedNullByte(Collection<String> stringList){
        byte delimiter = (byte) 0;
        int numBytes = 0;
        int index = 0;
        List<Byte> byteList = new ArrayList<>();
        int stringListsize = stringList.size();
    
        for (String str : stringList) {
            numBytes += str.getBytes().length;
        }
    
        for (String str : stringList) {
            byte[] currentByteArr = str.getBytes();
            for (byte b : currentByteArr) {
                byteList.add(b);
            }
            index++;
            if (index < stringListsize) byteList.add(delimiter);
        }
        Byte[] byteArr = byteList.toArray(new Byte[numBytes]);
        return new String(ArrayUtils.toPrimitive(byteArr));
    }

    qwerty123, 24 Апреля 2020

    Комментарии (1)
  8. Java / Говнокод #26597

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    public class FloatDynamicArray implements DynamicArray {
    
    	private int arrayLength;
    	private int countOfValues;
    	
    	private float[] dataArray;
    	
    	
    	public FloatDynamicArray(int arrayLength) {
    		this.arrayLength = arrayLength;
    		
    		dataArray = new float[arrayLength];
    	}
    	
    	
    	public long getLongValue(int index) {
    		throw new IllegalAccessError("Cannot get long value from FloatDynamicArray !");
    	}
    
    	public float getFloatValue(int index) {
    		return dataArray[index];
    	}
    ...
    ...
    ...

    зачем делать отдельный метод getLongValue, который возбуждает исключение IllegalAccessError, когда мы заведомо знаем что это FloatDynamicArray, содержащий float[] значения ?

    akm88, 23 Апреля 2020

    Комментарии (33)
  9. Java / Говнокод #26588

    +6

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    public Page<DispatchSchedule>findBySalesOrderItemSalesOrderOrderDateBetween(Date startDate, Date endDate, Pageable pageable) {
            return repository.findBySalesOrderItemSalesOrderOrderDateBetween(startDate, endDate, pageable);
    
        }
        public Page<DispatchSchedule> findBySalesOrderItemSalesOrderOrderDateAndJob(Date date, Job job, Pageable pageable) {
            return repository.findBySalesOrderItemSalesOrderOrderDateAndJob(date, job, pageable);
        }
    
        public Page<DispatchSchedule> findBySalesOrderItemSalesOrderOrderDateBetweenAndJob(Date startDate, Date endDate, Job job, Pageable pageable) {
            return repository.findBySalesOrderItemSalesOrderOrderDateBetweenAndJob(startDate, endDate, job, pageable);
        }
       
        public Page<DispatchSchedule> findBySalesOrderItemSalesOrderCustomerAndSalesOrderItemSalesOrderOrderDateBetween(Customer customer, Date startDate, Date endDate, Pageable pageable) {
            return repository.findBySalesOrderItemSalesOrderCustomerAndSalesOrderItemSalesOrderOrderDateBetween(customer, startDate, endDate, pageable);
        }
        public Page<DispatchSchedule> findBySalesOrderItemSalesOrderCustomerAndSalesOrderItemSalesOrderOrderDateAndJob(Customer customer, Date date, Job job, Pageable pageable) {
            return repository.findBySalesOrderItemSalesOrderCustomerAndSalesOrderItemSalesOrderOrderDateAndJob(customer, date, job, pageable);
    
        }
        public Page<DispatchSchedule> findBySalesOrderItemSalesOrderCustomerAndSalesOrderItemSalesOrderOrderDateBetweenAndJob(Customer customer, Date startDate, Date endDate, Job job, Pageable pageable) {
            return repository.findBySalesOrderItemSalesOrderCustomerAndSalesOrderItemSalesOrderOrderDateBetweenAndJob(customer, startDate, endDate, job, pageable);
        }
    
        Page<DispatchSchedule> findBySalesOrderItemSalesOrderCustomer(Customer customer, Pageable pageable) {
            return repository.findBySalesOrderItemSalesOrderCustomer(customer, pageable);
        }
    
        Page<DispatchSchedule> findByJob(Job job, Pageable pageable) {
            return repository.findByJob(job, pageable);
    }
    
    
    public Page<DispatchSchedule> findByJobItemAndSalesOrderItemSalesOrderOrderDateBetween(Item item, Date startDate, Date endDate, Pageable pageable) {
        return repository.findByJobItemAndSalesOrderItemSalesOrderOrderDateBetween(item, startDate, endDate, pageable);
    }
    
    public Page<DispatchSchedule> findBySalesOrderItemSalesOrderSalesOrderTypeAndSalesOrderItemSalesOrderOrderDateBetween(SalesOrderType salesOrderType, Date startDate, Date endDate, Pageable pageable) {
        return repository.findBySalesOrderItemSalesOrderSalesOrderTypeAndSalesOrderItemSalesOrderOrderDateBetween(salesOrderType, startDate, endDate, pageable);
    }
    
    public Page<DispatchSchedule> findByJobItemAndSalesOrderItemSalesOrderOrderDateBetweenAndJob(Item item, Date startDate, Date endDate, Job job, Pageable pageable) {
        return repository.findByJobItemAndSalesOrderItemSalesOrderOrderDateBetweenAndJob(item, startDate, endDate, job, pageable);
    }
    
    public Page<DispatchSchedule> findByJobItemAndSalesOrderItemSalesOrderOrderDateBetweenAndSalesOrderItemSalesOrderSalesOrderType(Item item, Date startDate, Date endDate, SalesOrderType salesOrderType, Pageable pageable) {
        return repository.findByJobItemAndSalesOrderItemSalesOrderOrderDateBetweenAndSalesOrderItemSalesOrderSalesOrderType(item, startDate, endDate, salesOrderType, pageable);
    }
    
    public Page<DispatchSchedule> findByJobItemAndSalesOrderItemSalesOrderOrderDateBetweenAndSalesOrderItemSalesOrderCustomer(Item item, Date startDate, Date endDate, Customer customer, Pageable pageable) {
        return repository.findByJobItemAndSalesOrderItemSalesOrderOrderDateBetweenAndSalesOrderItemSalesOrderCustomer(item, startDate, endDate, customer, pageable);
    }
    
    public Page<DispatchSchedule> findBySalesOrderItemSalesOrderSalesOrderTypeAndSalesOrderItemSalesOrderOrderDateBetweenAndJob(SalesOrderType salesOrderType, Date startDate, Date endDate, Job job, Pageable pageable) {
        return repository.findBySalesOrderItemSalesOrderSalesOrderTypeAndSalesOrderItemSalesOrderOrderDateBetweenAndJob(salesOrderType, startDate, endDate, job, pageable);
    }
    
    public Page<DispatchSchedule> findBySalesOrderItemSalesOrderSalesOrderTypeAndSalesOrderItemSalesOrderOrderDateBetweenAndSalesOrderItemSalesOrderCustomer(SalesOrderType salesOrderType, Date startDate, Date endDate, Customer customer, Pageable pageable) {
        return repository.findBySalesOrderItemSalesOrderSalesOrderTypeAndSalesOrderItemSalesOrderOrderDateBetweenAndSalesOrderItemSalesOrderCustomer(salesOrderType, startDate, endDate, customer, pageable);
    }

    Можно мне травы, которую курили эти ребята :D
    Ссылка на репо:
    https://github.com/thilina01/file-manager-api/blob/25a771ac0c1940408fb7c7f021d63ef30b2af891/src/main/java/com/trendsmixed/fma/module/dispatchschedule/DispatchScheduleService.java

    pashaluk31, 17 Апреля 2020

    Комментарии (19)
  10. Java / Говнокод #26555

    0

    1. 1
    https://i.postimg.cc/7Z5pfXKj/gavno.png

    --Существует ли функция с такими перегрузками, что у всякого, кто ее использует, возникает желание повести автора этой функции?
    --Конечно, лови

    MAKAKA, 07 Апреля 2020

    Комментарии (20)