Koziołek
2017-08-11 12:18

Kiedyś miałem taki plan, by opisać mniej znane pakiety Guavy. Średnio to wyszło, ale nic straconego. Dzisiaj będzie o takiej właśnie mniej znanej części Guavy.

https://koziolekweb.pl/2017/0[...]zesc-wspolna-zbiorow-z-guava/

#java #guava #koziolekweb

Koziołek
2014-10-05 15:21

W swoim czasie poleciłem @karolinaa użycie Guava Event Bus jako narzędzia do komunikacji pomiędzy elementami GUI bodajże. Dziś krótko o tym czym jest to rozwiązanie i jak działa.

link

#java #guava #koziolekweb

EroSanin

@lukas_gab: Czy mi pasuje? Niekoniecznie. Czy pracuje z prostakami? Też nie prawda(no może jest wyjątek lub dwa). Poza tym czytanie ze zrozumieniem się kłania. Pisałem, że to już trzecia firma gdzie ludzie po prostu przeklinają w dziale IT. Dzieję się tak po prostu w wielu działach technicznych. Deal with it.

karolinaa

u mnie są przekleństwa też w samym kodzie. nwm po co tak spinać się

Koziołek
2014-09-16 12:51

Za co lubię Javę 8? Ano za to

public interface Logger {
 
    enum Level {
        DEBUG, INFO, WARN, ERROR
    }
 
    default void debug(String msg, Supplier<String>... params) {
        log(DEBUG, msg, params);
    }
 
    default void info(String msg, Supplier<String>... params) {
        log(INFO, msg, params);
    }
 
    default void warn(String msg, Supplier<String>... params) {
        log(WARN, msg, params);
    }
 
    default void error(String msg, Supplier<String>... params) {
        log(ERROR, msg, params);
    }
 
    Level getLevel();
 
    default void log(Level lvl, String msg, Supplier<String>... params) {
        if (lvl.compareTo(getLevel()) < 0) {
            return;
        }
        String header = String.format("[%s] %s ", lvl.name(), LocalDateTime.now());
        Object[] objects = Arrays.asList(params).stream().map(Supplier::get).toArray();
        String body = String.format(msg, objects);
        System.out.printf(header + body + "\n"); // można dać dodatkową metodę flush implementowaną w konkretnych loggerach np. do DB, plików czy konsoli
    }
}

To fragment z cwiczenia jakie będziemy wykonywać na warsztatach poświęconych programowniau funkcyjnemu w Javie na warsjawie już 26 i 27 września.
Po więcej zapraszam na bloga (będzie tam też wersja guavowa dla javy < 8) - http://koziolekweb.pl

#java #java8 #koziolekweb #guava #warsjawa

@karolinaa powinno cię się spodobać ;)

Koziołek
2014-09-11 11:04

Konieczność pałowania się z kodem w javie może zostać wynagrodzona takim oto tworem:

class FileLinesIterator<T> extends AbstractIterator<T> implements PeekingIterator<T> {
 
    private final Supplier<Optional<T>> supplier;
 
    public FileLinesIterator(Supplier<Optional<T>> supplier) {
        Preconditions.checkNotNull(supplier, "You can't squeeze blood out of a turnip");
        this.supplier = supplier;
    }
 
    @Override
    protected T computeNext() {
        Optional<T> optional = supplier.get();
        return optional.isPresent() ? optional.get() : endOfData();
    }
}

Dzięki niemu mamy możliwość zrobienia I/O bez efektów ubocznych, wyjątków i tego typu problemów. Więcej na http://koziolekweb.pl

#java #guava #koziolekweb

Koziołek
2014-09-02 09:43

Przygotowuję kolejny wpis na bloga związany z praktycznym wykorzystaniem Guavy (i w perspektywie Javy 8). Tym razem na tapetę trafi klasa Joiner i pewna konstrukcja spotykana w ręcznie budowanych zapytaniach SQL:

public String buildQueryString(){
   StringBuilder sb = new StringBuilder();
   String query = "select * from some_table where column_a >= ? and column_b in (?";
   sb.append(query);
   for (int i = 1; i < columnBValues.size(); i++) {
      sb.append(",?");
   }
   sb.append(")");
   return sb.toString();
}

Pomijając to, że ten kod jest naprawdę paskudny.

#java #guava #koziolekweb