質問

これは避けていました...私はPHPガワJava、JSPプロジェクト.私は知っていうゃる通りすぎコードの完全なパワーのある.

内にあります。います。このような状況にある:

書い小さなスが表示されたお客様には何日間で水を芝生に基づくり湯治グループ(ABCDE)とは何時期です。当社の四季折々のように見えます:夏(5-1に8-31) 春(3-1に4-30) 秋(9-1に10-31) 冬季(11-1に2-28)

るが考えられます。:

について知っておきましょグループは、ここでは私の可能時間:冬期:月曜日のみ 春季:火木土 夏:当日 秋期:火木土

またこのPHPを使い配列のようになります:

//M=Monday,t=Tuesday,T=Thursday.... etc
$schedule["A"]["Winter"]='M';
$schedule["A"]["Spring"]='tTS';
$schedule["A"]["Summer"]='Any';
$schedule["A"]["Fall"]='tTS';
$schedule["B"]["Winter"]='t';

その日の配列(array("火曜日","木","土曜日は"どのものである必要はないかと思います。

また、必要な設定の配列を決定します季節ん:

$seasons["Summer"]["start"]=0501;
$seasons["Summer"]["end"]=0801;

誰でもできますからねないという。まして、今日の日程で、グループ。ずっと作りたいと思っていたのも日(M)または日(tTS),(年)

役に立ちましたか?

解決

なにができるのは、本質的には同じコードを超えるセットはハッシュテーブル(またはその他の地図):

Hashtable<String, Hashtable<String, String>> schedule
    = new Hashtable<String, Hashtable<String, String>>();
schedule.put("A", new Hashtable<String, String>());
schedule.put("B", new Hashtable<String, String>());
schedule.put("C", new Hashtable<String, String>());
schedule.put("D", new Hashtable<String, String>());
schedule.put("E", new Hashtable<String, String>());

schedule.get("A").put("Winter", "M");
schedule.get("A").put("Spring", "tTS");
// Etc...

ないとしても、それでも、Javaな動的言語ではないハッシュの言語です。

注意:ることができるかもしれませんより溶液のようなポップされるようにしていただきました。

他のヒント

使いやすさとダイナミックであるものの、そのPHPです。すし初 定義 で作られています。

interface Season
{
    public string getDays();
}

interface User
{
    public Season getWinter();
    public Season getSpring();
    public Season getSummer();
    public Season getFall();
}

interface UserMap
{
    public User getUser(string name);
}

く読んで、文書の ハッシュテーブル 使用してください。このクラスに同期されたという話が保護されmultithreadingはどんどん速にアクセスからの保護できます。ご利用下さい 地図 実装ではなくように HashMap または TreeMap.

うみちのJavaについて教えてくださいようにやっているのではPHPのであることが可能になっJava.こうした個々の配列オブジェクト、もしくは、少なくとも最初のレベルの配列のオブジェクトとして、各サブレベル変数としてのオブジェクトです。の構築データ構造と移植しているオブジェやアクセスのオブジェクトのデータ構造の定accessors.

のようなもの:

class Schedule
{
  private String group;
  private String season;
  private String rundays;
  public Schedule() { this.group = null; this.season = null; this.rundays= null; }
  public void setGroup(String g) { this.group = g; }
  public String getGroup() { return this.group; }
  ...
}

public ArrayList<Schedule> schedules = new ArrayList<Schedule>();
Schedule s = new Schedule();
s.setGroup(...);
...
schedules.add(s);
...

もちろん不足を補うものではない。ては、いけないのではありません。いい季節に、オブジェクトも各曜日のリストとしてオブジェクトです。とにかく、より簡単に再利用され、理解し、その伸ばせるよりもクとハッシュテーブルという模倣PHPのコードです。もちろん、PHP物も、すべて同様のファッションをおかわりブ配列でご利用ください。わからなくはないの誘惑、不正行為を行なってる。PHPすることが可能ですので、楽しみに!

こちらはその のように見えま図は出:

A = new Group();
A.getSeason(Seasons.WINTER).addDay(Days.MONDAY);
A.getSeason(Seasons.SPRING).addDay(Days.TUESDAY).addDay(Days.THURSDAY);
A.getSeason(Seasons.SPRING).addDays(Days.MONDAY, Days.TUESDAY, ...);

schedule = new Schedule();
schedule.addWateringGroup( A );

したらいいと思います。Javaプログラマーが得らJavaう観点から物事を考えるのはその言語agnostic-クリーナーについて教えてくださいがいずれかを使用定数または列挙です。この仕事を他の言語に対応し多次元配列.

を使用する場合は名前の定数は、例えば:

int A = 0;
int B = 1;
int C = 2;
int D = 3;

int Spring = 0; 
int Summer = 1;
int Winter = 2; 
int Fall = 3;
...

その後の定数として読みやすくするために配列subscripts:

schedule[A][Winter]="M";
schedule[A][Spring]="tTS";
schedule[A][Summer]="Any";
schedule[A][Fall]="tTS";
schedule[B][Winter]="t";

を列挙型

enum groups
{
  A = 0,
  B = 1,
  C = 2,
  D = 3
}

enum seasons
{
  Spring = 0,
  Summer = 1,
  Fall = 2,
  Winter = 3
}
...
schedule[groups.A][seasons.Winter]="M";
schedule[groups.A][seasons.Spring]="tTS";
schedule[groups.A][seasons.Summer]="Any";
schedule[groups.A][seasons.Fall]="tTS";
schedule[groups.B][seasons.Winter]="t";

私は完全に失理由としては、いいと考えていることを投げgobsのオブジェでコードがかかるものと思われます。例えば、あなたが正確に四季折々の表情な または 店舗 ものです。どのような簡単なしオブジェ?ウイングがこれらすべきだろう 定数 でもenums).

どのブルース-スニーズ、その心は、単なるルックアップ。ただ、階層オブジェクトのトランスジェているが、そこでは彼が必要との方を見上げスケジュールに基づき、グループの識別子です。回転物体のみ意味をない責任はます。場合には、それだけでは識別子とのルールは古代ギリシャオブジェクトでは、コードベースが大きくなります。

構築例 Group オブジェクトを含むセットスケジュールの文字列(季節ごと)ですが、すべての Group オブジェクトがは提供のルックアップ機能、そしてまで他のルックアップテーブルかに少ない直感的なファッション。またはグループは、そのルックアップのスケジュール、すべての彼は二段階の手続きによってルックアップテーブルは、より時間を要しましたコードであるバギー、硬ナンス性の向上にも寄与します。

私はとることを示唆するものもみられる封止機能にオブジェクト。

import java.util.Date;
import java.util.Map;
import java.util.Set;

public class Group {

    private String groupName;

    private Map<Season, Set<Day>> schedule;

    public String getGroupName() {
        return groupName;
    }

    public void setGroupName(String groupName) {
        this.groupName = groupName;
    }

    public Map<Season, Set<Day>> getSchedule() {
        return schedule;
    }

    public void setSchedule(Map<Season, Set<Day>> schedule) {
        this.schedule = schedule;
    }

    public String getScheduleFor(Date date) {
        Season now = Season.getSeason(date);
        Set<Day> days = schedule.get(now);
        return Day.getDaysForDisplay(days);
    }

}

編集:また、日付の範囲らなくてはいけないとかにうるう年を考:

当社の四季折々のように見えます:夏 (5-1に8-31)春(3-1に4-30) 秋(9-1に10-31)冬季(11-1に 2-28)

同意するべきだ絶対にこの論理のクリーンのインタフェース:

public String lookupDays(String group, String date);

かき棒のデータの特性にファイルです。私に対してではなhardcodingこのデータソースファイルだが、Javaできるか語に絶する入れ子ョンにします。ファイルが次のように記述されています。

A.夏=M
A.泉=tTS
B.夏=T

通常んの動静データをこのような外部ファイルで増加させることの"距離"との間でデータをコードして使用します。しかし、きついにネストしたコレクション、特に地図かなくては知ることができないもの"を実現ろす

かない場合にはこのようなアイデアもいつものようになります:

public class WaterScheduler
{
  private static final Map<String, String> GROUP2SEASON = new HashMap<String, String>();
  static
  {
    addEntry("A", "Summer", "M");
    addEntry("A", "Spring", "tTS");
    addEntry("B", "Summer", "T");
  }

  private static void addEntry(String group, String season, String value)
  {
    GROUP2SEASON.put(group + "." + season, value);
  }

}

本体を万が一紛失してしまっも読みやすさが少なくとも、データづくりを進めていることにより使用できます。

なの日"においてパラメータ?だけを表示する湯治のWateringScheduleクラス自体では何の日であることに変わりはなく、そのためどの季節です。そして方法を返しまmapのキーは、グループ。のようなもの:

public Map<String,List<String>> getGroupToScheduledDaysMap() {
  // instantiate a date or whatever to decide what Map to return
}

そのJSPページ

<c:forEach var="day" items="${scheduler.groupToScheduledDaysMap["A"]}">
   ${day}
</c:forEach>

が必要な場合は、日程により季節する方法にWateringScheduleクラスを返します地図が四季折々の鍵であり、その地図のgroupToScheduledDaysの値です。

うかるすべてのデータをデータベース化ではなく、ハード-コーディングでお源や特性をファイルです。

データベースを使用するほうが楽というの維持が 様々な 無料 データベース エンジンを選んでいます。

これら二つのデータベースエンジンの実施全Javaは、以下から入手できますし、お申込みだけを含むjarファイルです。ちょっとヘビー級といえるものではありまアクセスが容易性の向上にも寄与します。があるからこそ20の記録、今日ではないからありませんので以後の変化やクリープ

場合は、数週間から数か月が決まりましたら追加したいという時間-湯治制限できまくることができたことを付記する。機能だけを既に利用中のデータベースです。なれる、そん時間の学習をどう埋め込みデータベースアプリケーション

ありませんか。Javaんのようなことです。マイク-ソリューションはかなりのうたい文字列として指数(キー).別のオプションの場合はハッシュのハッシュセットアップはも醜いは追加の文字列(shamelesslyから奪われたマイクおよび修正):

Hashtable<String, String> schedule = new Hashtable<String, String>();
schedule.put("A-Winter", "M");
schedule.put("A-Spring", "tTS");

そのルックアップ:

String val = schedule.get(group + "-" + season);

だに不満を持つ一般の醜(おんせん)のかたまりをビニール袋に入れ、すべての裏方法:

String whenCanIWater(String group, Date date) { /* ugliness here */ }

tl;dr

現代のJava言語機能や、クラス、独自に定義すenumsを代表する季節グループでご利用いただけます。

Schedule.daysForGroupOnDate( 
    Group.D , 
    LocalDate.now()
)  

この方法の利 SetDayOfWeek 列挙型オブジェクト(いない単なるテキスト!), など DayOfWeek.TUESDAY & DayOfWeek.THURSDAY.

現代のJava

誰でもできますからねないという。

そうです。

現代のJavaのために設計されたクラスコレクション、enumsお手伝いをさせていただいております。

java.時間 枠組み構築には、Javaの Month enumの実装および DayOfWeek enum.

EnumSetEnumMap の実装を提供しの SetMap られるように最適化された利用enums高速に実行していない。

を定義することが出来まご自身の enums は季節ごグループ(A、B、およびかける。Enum施設にはJavaかなり有力強しようとする試みが積み重ねられるその他の言語を学んでいます。ない場合には、おなじみの Oracleのチュートリアル.

単純な構文を定義するご自身のenums実際にディスアグリゲーションの機能に必要なこれを解決する問題を削除することにより複雑な符号といいます。新しい リテラル構文 のためのセットや地図を コファクトリメソッド Java9(展後も貴社に代269 このコードも簡単になります。

こちらは完全に作アプリです。 注記ほとんどのコード あためのアルゴリズムの定義およびユーザーインターフェイスenumsは最重-上します。●

一点に注意このアプリのコード:では何も変わり、お客様のビジネスの定義を参照する場合は、少なくとも変更があった場合だけの現在のルール"は最大の".の場合ルール変更時に必要なものはすべての過去、現在、将来のバージョン、育成のための非常に異なるアプリからデータベースのルールこのアプリはここを解決の問題としています。

Season

は季節ごとに列挙型 Season.季節ごとにオブジェクト開催 ListMonth 列挙型オブジェクトの長さを定義すると、特定の季節でした。の新しい List.of 構文を追加しましたJava9を定義します変更不能なリストをリテラル構文によstaticファクトリメソッド.

package com.basilbourque.watering;

import java.time.LocalDate;
import java.time.Month;
import java.util.EnumSet;
import java.util.List;
import java.util.Set;

public enum Season
{
    SPRING( List.of( Month.MARCH , Month.APRIL ) ),
    SUMMER( List.of( Month.MAY , Month.JUNE, Month.JULY , Month.AUGUST ) ),
    FALL( List.of( Month.SEPTEMBER , Month.OCTOBER ) ),
    WINTER( List.of( Month.NOVEMBER , Month.DECEMBER , Month.JANUARY , Month.FEBRUARY ) );

    private List< Month > months;

    // Constructor
    Season ( List < Month > monthsArg )
    {
        this.months = monthsArg;
    }

    public List < Month > getMonths ( )
    {
        return this.months;
    }

    // For any given month, determine the season.
    static public Season ofLocalMonth ( Month monthArg )
    {
        Season s = null;
        for ( Season season : EnumSet.allOf( Season.class ) )
        {
            if ( season.getMonths().contains( monthArg ) )
            {
                s = season;
                break; // Bail out of this FOR loop.
            }
        }
        return s;
    }

    // For any given date, determine the season.
    static public Season ofLocalDate ( LocalDate localDateArg )
    {
        Month month = localDateArg.getMonth();
        Season s = Season.ofLocalMonth( month );
        return s;
    }

    // Run `main` for demo/testing.
    public static void main ( String[] args )
    {
        // Dump all these enum objects to console.
        for ( Season season : EnumSet.allOf( Season.class ) )
        {
            System.out.println( "Season: " + season.toString() + " = " + season.getMonths() );
        }
    }
}

Group

表各グループ分けお客様の芝生/ヤード,(A,B,C,D,E)としての列挙型の名前 Group.それぞれの列挙型オブジェの開催 Map, マッピングする Season 列挙型のオブジェクト SetDayOfWeek 列挙型オブジェクト。例えば、 Group.ASeason.SPRING できる湯治の二日間、 DayOfWeek.TUESDAY & DayOfWeek.THURSDAY.

package com.basilbourque.watering;

import java.time.DayOfWeek;
import java.util.EnumMap;
import java.util.EnumSet;
import java.util.Map;
import java.util.Set;

public enum Group
{
    A(
            Map.of(
                    Season.SPRING , EnumSet.of( DayOfWeek.TUESDAY , DayOfWeek.THURSDAY ) ,
                    Season.SUMMER , EnumSet.allOf( DayOfWeek.class ) ,
                    Season.FALL , EnumSet.of( DayOfWeek.TUESDAY , DayOfWeek.THURSDAY ) ,
                    Season.WINTER , EnumSet.of( DayOfWeek.TUESDAY )
            )
    ),
    B(
            Map.of(
                    Season.SPRING , EnumSet.of( DayOfWeek.FRIDAY ) ,
                    Season.SUMMER , EnumSet.allOf( DayOfWeek.class ) ,
                    Season.FALL , EnumSet.of( DayOfWeek.TUESDAY , DayOfWeek.FRIDAY ) ,
                    Season.WINTER , EnumSet.of( DayOfWeek.FRIDAY )
            )
    ),
    C(
            Map.of(
                    Season.SPRING , EnumSet.of( DayOfWeek.MONDAY ) ,
                    Season.SUMMER , EnumSet.allOf( DayOfWeek.class ) ,
                    Season.FALL , EnumSet.of( DayOfWeek.MONDAY , DayOfWeek.TUESDAY ) ,
                    Season.WINTER , EnumSet.of( DayOfWeek.MONDAY )
            )
    ),
    D(
            Map.of(
                    Season.SPRING , EnumSet.of( DayOfWeek.WEDNESDAY , DayOfWeek.FRIDAY ) ,
                    Season.SUMMER , EnumSet.allOf( DayOfWeek.class ) ,
                    Season.FALL , EnumSet.of( DayOfWeek.FRIDAY ) ,
                    Season.WINTER , EnumSet.of( DayOfWeek.WEDNESDAY )
            )
    ),
    E(
            Map.of(
                    Season.SPRING , EnumSet.of( DayOfWeek.TUESDAY ) ,
                    Season.SUMMER , EnumSet.allOf( DayOfWeek.class ) ,
                    Season.FALL , EnumSet.of( DayOfWeek.TUESDAY , DayOfWeek.WEDNESDAY ) ,
                    Season.WINTER , EnumSet.of( DayOfWeek.WEDNESDAY )
            )
    );

    private Map < Season, Set < DayOfWeek > > map;

    // Constructor
    Group ( Map < Season, Set < DayOfWeek > > mapArg )
    {
        this.map = mapArg;
    }

    // Getter
    private Map < Season, Set < DayOfWeek > > getMapOfSeasonToDaysOfWeek() {
        return this.map ;
    }

    // Retrieve the DayOfWeek set for this particular Group.
    public Set<DayOfWeek> daysForSeason (Season season ) {
        Set<DayOfWeek> days =   this.map.get( season ) ; // Retrieve the value (set of days) for this key (a season) for this particular grouping of lawns/yards.
        return days;
    }



    // Run `main` for demo/testing.
    public static void main ( String[] args )
    {
        // Dump all these enum objects to console.
        for ( Group group : EnumSet.allOf( Group.class ) )
        {
            System.out.println( "Group: " + group.toString() + " = " + group.getMapOfSeasonToDaysOfWeek() );
        }
    }

}

Schedule

ワイヤーに引っ掛けて引っ張ってすべてが使われていること Schedule クラスです。

このクラスの二enums記に便利なります。唯一のメソッド実装でこれまでに知らせる日には、特定のグループの特定の日です。の方法を決める Season 適用されるこの日付に設定している。

走る main 方法はこちらダンプカーの内容につenums、報告日のき湯治の各グループは、特定のハードコードされた日です。

package com.basilbourque.watering;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoField;
import java.time.temporal.IsoFields;
import java.util.EnumSet;
import java.util.Set;

public class Schedule
{
    static private DateTimeFormatter isoWeekFormatter = DateTimeFormatter.ofPattern( "uuuu-'W'ww" ) ;

    static public Set < DayOfWeek > daysForGroupOnDate ( Group group , LocalDate localDate )
    {
        Season season = Season.ofLocalDate( localDate );
        Set < DayOfWeek > days = group.daysForSeason( season );
        return days;
    }

    // Run `main` for demo/testing.
    public static void main ( String[] args )
    {
        Season.main( null  );
        Group.main( null  );
        // Dump all these enum objects to console.
        for ( Group group : EnumSet.allOf( Group.class ) )
        {
            LocalDate localDate = LocalDate.now( ZoneId.of( "Africa/Tunis" ) );
            Set < DayOfWeek > days = Schedule.daysForGroupOnDate( group , localDate );
            String week = localDate.format( Schedule.isoWeekFormatter  ) ; // Standard ISO 8601 week, where week number one has the first Thursday of the calendar year, and week starts on Monday, so year is either 52 or 53 weeks long.
            String message = "Group " + group + " – Watering days on " + localDate + " week # " + week + " is: " + days;
            System.out.println( message );
        }
    }
}

コンソール

実行する場合 Schedule.main, 今捨てるのです。

季節:春=[年、月]

季節:夏=[月月月月]

季節:秋=[年月日]

季節:冬=[年、月]

グループA={泉=[火曜日、木曜日],秋=[火曜日、木曜日]夏=[月曜日、火曜日、水曜日、木曜日、金曜日、土曜日、日曜日、冬=[火]}

グループB={泉=[金],秋=[火曜日、金曜日]夏=[月曜日、火曜日、水曜日、木曜日、金曜日、土曜日、日曜日、冬=[金]}

グループC={泉=[月],秋=[月曜日、火曜日]夏=[月曜日、火曜日、水曜日、木曜日、金曜日、土曜日、日曜日、冬=[月曜日]}

グループD={泉=[水曜日、金曜日],秋=[金]、夏=[月曜日、火曜日、水曜日、木曜日、金曜日、土曜日、日曜日、冬=[水曜日]}

グループE={泉=[火],秋=[火曜日、水曜日]夏=[月曜日、火曜日、水曜日、木曜日、金曜日、土曜日、日曜日、冬=[水曜日]}

グループ–湯治日2018-01-30週#2018-W05は:[火]

グループB–散水日2018-01-30週#2018-W05は:[金]

グループC–散水日2018-01-30週#2018-W05は:[月曜日]

グループD散水日2018-01-30週#2018-W05は:[水曜日]

グループE–散水日2018-01-30週#2018-W05は:[水曜日]

ISO8601週間

ちょっとしたもの ISO8601 標準のための 定義の週.の基準を与える特定の意味"の週間"と定義テキスト形式の表は、特定の日以内に適に過ごせました。

作業などの週間以内に、Javaの検討を加えた ThreeTenインストール 図書館プロジェクトの YearWeek クラスです。

LocalDate

LocalDate クラスを表す日付け値な時間となります。

タイムゾーンが行われることが重要である。任意の瞬間は、日曜日、世界中によります。例えば、数分後夜 パリフランス 新日を"昨日に" モントリオールケベック.

ない場合は時間帯が指定されたJVM暗黙のうちに適用され、現在のデフォルトのタイムゾーンになります。このデフォルトの変更を)今こそすべき時であるさまも結果は変更になる場合がございます。より良い指定はご希望がなされる時間帯を明示的に引数に使います。

指定 適切なタイムゾーン名 の形式の continent/region, など America/Montreal, Africa/Casablanca, や Pacific/Auckland.は絶対に使わないでください3-4文字の省略形など EST または IST としてい ない trueの時間帯は標準化されなくなるかもしれない"世界をリードするユニークな!).

ZoneId z = ZoneId.of( "America/Montreal" ) ;  
LocalDate today = LocalDate.now( z ) ;

を利用する場合は、JVMの現在のデフォルトのタイムゾーン、お願いいのでパスを引数に使います。省略した場合、JVMの現在のデフォルトの適用暗黙のうちに.よきます

ZoneId z = ZoneId.systemDefault() ;  // Get JVM’s current default time zone.

またはを指定します。設定でき、月より、ソ番1-12月ました。

LocalDate ld = LocalDate.of( 1986 , 2 , 23 ) ;  // Years use sane direct numbering (1986 means year 1986). Months use sane numbering, 1-12 for January-December.

または、よりよい利用を Month enum物を事前に定義された、月毎、年ヒント:これらの利用 Month オブジェを通してコードベースではなく単なる整数をコードより自己記録を確保し、有効な値を提供し type-安全.

LocalDate ld = LocalDate.of( 1986 , Month.FEBRUARY , 23 ) ;

不変集

のリストを設定し、地図を見る上でも不変なコレクション、などを変更する会員の方の蔵が交絡は、誤りである。

の新しいJava9構文 List.ofMap.of 既に約束すると変更できません。しかし、場合に Map されるべき EnumMap 効率の性能をしています。現在の実施 Map.ofSet.of が検出されないことを利用enumsに会員として自動的に最適化と内部使用の EnumMapEnumSet.あるOpenJDK発行開を考えるなどの問題: 検討の強化EnumMap、EnumSet.

片を得る不変のEnumSetと不変でEnumMapをお断りすることもあり Googleョン 図書館

その結果のそれぞれの用途基 EnumSet/EnumMap.業務など getput 例外をスローします。いたしますので、あの列挙型関連の最適化と不変性.

こちらの SeasonGroup 授業が上記の修正に利用して、Googleグァバ23.6図書館があります。

Season と不変性

package com.basilbourque.watering;

import java.time.LocalDate;
import java.time.Month;
import java.util.EnumSet;
import java.util.List;

public enum Season
{
    SPRING( List.of( Month.MARCH , Month.APRIL ) ),  // `List.of` provides literals-style syntax, and returns an immutable `List`. New in Java 9.
    SUMMER( List.of( Month.MAY , Month.JUNE, Month.JULY , Month.AUGUST ) ),
    FALL( List.of( Month.SEPTEMBER , Month.OCTOBER ) ),
    WINTER( List.of( Month.NOVEMBER , Month.DECEMBER , Month.JANUARY , Month.FEBRUARY ) );

    private List< Month > months;

    // Constructor
    Season ( List < Month > monthsArg )
    {
        this.months = monthsArg;
    }

    public List < Month > getMonths ( )
    {
        return this.months;
    }

    // For any given month, determine the season.
    static public Season ofLocalMonth ( Month monthArg )
    {
        Season s = null;
        for ( Season season : EnumSet.allOf( Season.class ) )
        {
            if ( season.getMonths().contains( monthArg ) )
            {
                s = season;
                break; // Bail out of this FOR loop.
            }
        }
        return s;
    }

    // For any given date, determine the season.
    static public Season ofLocalDate ( LocalDate localDateArg )
    {
        Month month = localDateArg.getMonth();
        Season s = Season.ofLocalMonth( month );
        return s;
    }

    // Run `main` for demo/testing.
    public static void main ( String[] args )
    {
        // Dump all these enum objects to console.
        for ( Season season : EnumSet.allOf( Season.class ) )
        {
            System.out.println( "Season: " + season.toString() + " = " + season.getMonths() );
        }
    }
}

Group と不変性

package com.basilbourque.watering;

import com.google.common.collect.Maps;
import com.google.common.collect.Sets;

import java.time.DayOfWeek;
import java.util.EnumSet;
import java.util.Map;
import java.util.Set;

public enum Group
{
    A(
            Maps.immutableEnumMap(
                    Map.of(  // `Map.of` provides literals-style syntax, and returns an immutable `Map`. New in Java 9.
                            Season.SPRING , Sets.immutableEnumSet( DayOfWeek.TUESDAY , DayOfWeek.THURSDAY ) ,
                            Season.SUMMER , Sets.immutableEnumSet( EnumSet.allOf( DayOfWeek.class ) ) ,
                            Season.FALL , Sets.immutableEnumSet( DayOfWeek.TUESDAY , DayOfWeek.THURSDAY ) ,
                            Season.WINTER , Sets.immutableEnumSet( DayOfWeek.TUESDAY )
                    )
            )
    ),

    B(
            Maps.immutableEnumMap(
                    Map.of(
                            Season.SPRING , Sets.immutableEnumSet( DayOfWeek.FRIDAY ) ,
                            Season.SUMMER , Sets.immutableEnumSet( EnumSet.allOf( DayOfWeek.class ) ) ,
                            Season.FALL , Sets.immutableEnumSet( DayOfWeek.TUESDAY , DayOfWeek.FRIDAY ) ,
                            Season.WINTER , Sets.immutableEnumSet( DayOfWeek.FRIDAY )
                    )
            )
    ),

    C(
            Maps.immutableEnumMap(
                    Map.of(
                            Season.SPRING , Sets.immutableEnumSet( DayOfWeek.MONDAY ) ,
                            Season.SUMMER , Sets.immutableEnumSet( EnumSet.allOf( DayOfWeek.class ) ) ,
                            Season.FALL , Sets.immutableEnumSet( DayOfWeek.MONDAY , DayOfWeek.TUESDAY ) ,
                            Season.WINTER , Sets.immutableEnumSet( DayOfWeek.MONDAY )
                    )
            )
    ),

    D(
            Maps.immutableEnumMap(
                    Map.of(
                            Season.SPRING , Sets.immutableEnumSet( DayOfWeek.WEDNESDAY , DayOfWeek.FRIDAY ) ,
                            Season.SUMMER , Sets.immutableEnumSet( EnumSet.allOf( DayOfWeek.class ) ) ,
                            Season.FALL , Sets.immutableEnumSet( DayOfWeek.FRIDAY ) ,
                            Season.WINTER , Sets.immutableEnumSet( DayOfWeek.WEDNESDAY )
                    )
            )
    ),

    E(
            Maps.immutableEnumMap(
                    Map.of(
                            Season.SPRING , Sets.immutableEnumSet( DayOfWeek.TUESDAY ) ,
                            Season.SUMMER , Sets.immutableEnumSet( EnumSet.allOf( DayOfWeek.class ) ) ,
                            Season.FALL , Sets.immutableEnumSet( EnumSet.of( DayOfWeek.TUESDAY , DayOfWeek.WEDNESDAY ) ) ,
                            Season.WINTER , Sets.immutableEnumSet( DayOfWeek.WEDNESDAY )
                    )
            )
    );

    private Map < Season, Set < DayOfWeek > > map;

    // Constructor
    Group ( Map < Season, Set < DayOfWeek > > mapArg )
    {
        this.map = mapArg;
    }

    // Getter
    private Map < Season, Set < DayOfWeek > > getMapOfSeasonToDaysOfWeek ( )
    {
        return this.map;
    }

    // Retrieve the DayOfWeek set for this particular Group.
    public Set < DayOfWeek > daysForSeason ( Season season )
    {
        Set < DayOfWeek > days = this.map.get( season ); // Retrieve the value (set of days) for this key (a season) for this particular grouping of lawns/yards.
        return days;
    }

    // Run `main` for demo/testing.
    public static void main ( String[] args )
    {
        // Dump all these enum objects to console.
        for ( Group group : EnumSet.allOf( Group.class ) )
        {
            System.out.println( "Group: " + group.toString() + " = " + group.getMapOfSeasonToDaysOfWeek() );
        }
    }

}

約java.時間

java.時間 枠組みがJava8以降である。これらのクラスsupplantの面倒古 レガシー 日付-時間の授業など java.util.Date, Calendar, & SimpleDateFormat.

Joda-時間 プロジェクトは、 メンテナンスモード,助言への移行 java.時間 ます。

詳細は、 Oracleのチュートリアル.検索スタックオーバーフローのための多くの例で説明しています。仕様 JSR310.

入手先のjava.時間の授業で

  • Java SE8, Java SE9, 以降、
    • ですのでお問い合わせ下さい。
    • 一部の標準のJava APIでは、同梱の実装です。
    • Java9を追加し若干の特徴と問題を修正
  • Java SE6Java SE7
  • Android
    • 次期バージョン以降でも、Androidのバンドルの実装は、java.時間ます。
    • それ以前のAndroid、 ThreeTenABP プロジェクトに対応 ThreeTen-Backport (上).見 使い方ThreeTenABP....

ThreeTenインストール プロジェクトextends java.時間を追加します。このプロジェクトには、立地のためには、将来的な追加java.ます。すべての授業などはこちら Interval, YearWeek, YearQuarter, は、 以上.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top