14 Eylül 2015 Pazartesi

ServletContextListener

Giriş
Bu sınıf servlet ilk defa yüklenirken çağrılır. İskeleti şöyle tanımlanır
public class ApplicationContext implements ServletContextListener {

 @Override
 public void contextInitialized(ServletContextEvent servletContextEvent) {
 ...
 }

 @Override
 public void contextDestroyed(ServletContextEvent servletContextEvent) {
 ...
 }
}

Servlet'e Nesne Eklemek
Yükleme esnasında servlet context'ine nesne eklemek mümkün. Şöyle yaparız.
servletContextEvent.getServletContext().setAttribute("dao",new ClientDaoImpl();
web.xml Dosyasında Nasıl Tanımlanır?
Şöyle tanımlanır.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="..."
  xmlns:xsi="..."
  xsi:schemaLocation="..."
  version="3.1">

  ...
  <listener>
    <listener-class>com.taxi.service.utils.ApplicationContext</listener-class>
  </listener>
  ...
</web-app>
Yeni Java Servlet'leri ile xml kullanmaya gerek te kalmamış. Sınıfın başına  @WebListener tag'i ekleyerek xml tanımından kurtulmak mümkün.


SummaryStatistics

Giriş
SummaryStatistics sınıfları Double, Int gibi türler için var.

average
average şöyle alınabilir, ancak bence aşağıdaki sınıflar daha iyi.
double average = list
.stream()
.filter(new Predicate<Person>(){
          public boolean test(Person p){
              return p.getGender() == Person.Sex.MALE;
           }
      })
.mapToInt(Person::getAge)
.average()
.getAsDouble();
sum
sum şöyle alınabilir, ancak bence aşağıdaki sınıflar daha iyi.
List<Double> doubles = getListOfDoubles();
double sum = doubles.stream()
                    .mapToDouble(d -> d)
                    .sum();

DoubleSummaryStatistics
Şöyle yaratırız.
List<Double> doubles = ...;
DoubleSummaryStatistics stats = doubles.stream().
  collect(Collectors.summarizingDouble(Double::doubleValue));
Daha sonra get metodları ise istatistiki bilgiler alınabilir.
System.out.println(stats.getAverage());
System.out.println(stats.getSum());