zmienna = warunek ? wartosc_jak_prawda : wartosc_jak_falsz;na przykład:
String message = object.getMessage().equals("") ? "brak wiadomości" : object.getMessage();
zmienna = warunek ? wartosc_jak_prawda : wartosc_jak_falsz;na przykład:
String message = object.getMessage().equals("") ? "brak wiadomości" : object.getMessage();
double kilobytes = 123.45678;
DecimalFormat df = new DecimalFormat("###.##");
System.out.println("kilobytes (DecimalFormat) : " + df.format(kilobytes));
Tylko żebyś się nie zdziwił, że w liczbie jest przecinek zamiast oczekiwanej kropki jak podałem w formacie "###.##". Otóż Java nie interpretuje tego dosłownie. Kropka jest tutaj znakiem odstępu dziesiętnego. W przypadku lokalizacji polskiej naszym naturalnym znakiem jest przecinek i stąd ta różnica.
df.format(kilobytes).replace(",", ".");
Aby zaś zastosować to na stałe użyj lokalizacji, dla której właściwym znakiem jest kropka. Na przykład amerykańskiej.
System.out.println(String.format(Locale.US, "%f", 3.141592));a można na stałe:
Locale.setDefault(Locale.US);
| liczba | wymagany format |
|---|---|
| 1 | 01.000 |
| 2,03 | 02.030 |
| 2,45 | 02.450 |
| 14,035 | 14.035 |
Float x = 2.35f;
DecimalFormat df = new DecimalFormat("00.000");
System.out.println(df.format(x).replace(",", "."));
na wyjściu otrzymałem:
02.350
| Kolekcja | Opis |
|---|---|
ArrayList |
Sekwencja indeksowana o zmiennych rozmiarach |
LinkedList |
Sekwencja uporządkowana umożliwiająca efektywne wstawianie i usuwanie dowolnej pozycji |
HashSet |
Kolekcja nieuporządkowana, która nie dopuszcza duplikatów. |
TreeSet |
Zbiór uporządkowany. Nie dopuszcza duplikatów |
EnumSet |
Zbiór wartości typu wyliczeniowego. Nie dopuszcza duplikatów |
LinkedHashSet |
Zbiór zapamiętujący kolejność wstawiania elementów. Nie dopuszcza duplikatów. |
PriorityQueue |
Kolekcja pozwalająca na efektywne usuwanie najmniejszego elementu. |
HashMap |
Struktura danych przechowująca asocjacje klucz -> wartość. |
TreeMap |
Mapa o kluczach uporządkowanych. |
EnumMap |
Mapa, której klucze należą do typu wyliczeniowego.
private enum BmiComponentNames {MASS, TALL}
EnumMap<BmiComponentNames, Float> bmiComponents = new EnumMap<BmiComponentNames, Float>BmiComponentNames.class); bmiComponents.put(BmiComponentNames.MASS, 79f); bmiComponents.put(BmiComponentNames.TALL, 185f); |
LinkedHashMap |
Mapa zapamiętująca porządek, w którym umieszczane były asocjacje. |
WeakHashMap |
Mapa, której wartości mogą być odzyskiwane przez mechanizm odzyskiwania nieużytków, gdy nie są używane nigdzie indziej. |
IdentityHashMap |
Mapa o kluczach porównywanych za pomocą operatora == a nie metody equals() |
| List | Set |
|---|---|
| Dopuszcza duplikaty. | Nie dopuszcza duplikatów. |
| Kolekcja uporządkowana. | Kolekcja nieuporządkowana. |
Używa metody equals() do porównywania elementów podczas wstawiania. |
|
Najpopularniejsze implementacje: ArrayList,
Vector,
LinkedList
Ciekawe omówienie różnic pomiędzy ArrayList, a LinkedList.
|
Najpopularniejsze implementacje: HashSet,
TreeSet,
LinkedHashSet |
Tworzę sobie model. Roboczo nazwijmy go UserMailer. Dziedziczy on po ActionMailer::Base. W modelu tym ustawiam metody, z których każda jest wzorem wysyłanego emaila.
Na przykład dla newslettera tworzę:
def newsletter(newsletter, email)
recipients email
from "#{Options::Program_name} - newsletter :: <#{Options::Email}>"
subject newsletter.subject
sent_on Time.now
body({
:body => newsletter.body
})
end
Przekazane parametry to:
newsletter - obiekt zawierający dane dla newslettera takie jak choćby temat;email emaile (emaile) do wysyłkinewsletter, a nazywająca się :body wystąpi w widoku.
Jeśli już mam metodę, to przygotowuję dla niej widok. Dla takiej konfiguracji, jaką opisuję widoki winny być umieszczone w folderze /views/user_mailer czyli w nazwie zgodnej z nazwą modelu.
Widok powinien być standardowym plikiem html.erb z dopiskiem .text. W naszym przypadku dla metody newsletter widok powinien się zwać nomen omen newsletter.text.html.erb albo newsletter.text.erb. W widokach należy unikać stosowania zewnętrznych styli i w ogóle ograniczyć zabawę ze stylami, gdyż w klientach mailowych źle się to wyświetla. Należy raczej pozostać przy dawnym formatowaniu przy pomocy tabel.
|
Tu jest jakiś nagłówek ...................................
|
| <%= @body %> |
|
A tu jest jakaś stopka ...................................
|
@body, którą definiowaliśmy w metodzie jako :body.UserMailer.deliver_newsletter(newsletter_data, "jan.testowy@test.pl")W metodzie
deliver_newsletter() po podkreślniku występuje nazwa metody, którą klasa UserMailer ma wywołać. Obiekt newsletter_data zawiera w swych polach dane do wysyłki newslettera. Na przykład newsletter_data.subject zawiera temat newslettera.
netsh advfirewall set global StatefulFTP disableteraz powinno zadziałać.
customer=Customer.find(params[:id]) customer.orders.each do |order| # ... tu jakieś operacje z użyciem order .... end
customer=Customer.find(params[:id])
customer.send("orders").each do |order|
# ... tu jakieś operacje z użyciem order ....
end