OracleのJDK9-eaのJavaDoc を参照して since:9 の表記があるクラスの一部について記載しています。
JDK9は未リリースであり、実際のリリースではこの記事とは異なる可能性があります。
Package java.lang 編
Integer の章
parseInt
public static int parseInt(CharSequence s,
int beginIndex,
int endIndex,
int radix)
throws NumberFormatException
文字列の一部を切り取ってIntegerにパースするメソッド
Java8
// 16進数で表記したカラーコード String cssColor = "#4dba16"; int red = Integer.parseInt(cssColor.substring(1, 3), 16); int green = Integer.parseInt(cssColor.substring(3, 5), 16); int blue = Integer.parseInt(cssColor.substring(5, 7), 16); // 何かのお金 String payStr = "2000メタ"; int pay = Integer.parseInt(payStr.substring(0, payStr.length() - 2), 10);
Java9
String cssColor = "#4dba16"; int red = Integer.parseInt(cssColor, 1, 3, 16); int green = Integer.parseInt(cssColor, 3, 5, 16); int blue = Integer.parseInt(cssColor, 5, 7, 16); String payStr = "2000メタ"; int pay = Integer.parseInt(payStr, 0, payStr.length() - 2, 10);
parseUnsignedInt
public static int parseUnsignedInt(CharSequence s,
int beginIndex,
int endIndex,
int radix)
throws NumberFormatException
文字列の一部を切り取って符号なしでIntegerにパースするメソッド
Java8
// Integer.MAX_VALUE is 2147483647 String maxPlusOne = "2147483648はIntegerの最大値を超えている"; // 次の行は NumberFormatException が発生する int parseInt = Integer.parseInt(maxPlusOne.substring(0, 10)); // 次の変数には -2147483648 が入る int parseUnsignedInt = Integer.parseUnsignedInt(maxPlusOne.substring(0, 10));
Java9
// Integer.MAX_VALUE is 2147483647 String maxPlusOne = "2147483648はIntegerの最大値を超えている"; // 次の行は NumberFormatException が発生する int parseInt = Integer.parseInt(maxPlusOne, 0, 10, 10); // 次の変数には -2147483648 が入る int parseUnsignedInt = Integer.parseUnsignedInt(maxPlusOne, 0, 10, 10);
Long の章
parseLong
public static long parseLong(CharSequence s,
int beginIndex,
int endIndex,
int radix)
throws NumberFormatException
文字列の一部を切り取ってLongにパースするメソッド
Java8 & Java9
Integerと同様なので省略
parseUnsignedLong
public static long parseUnsignedLong(CharSequence s,
int beginIndex,
int endIndex,
int radix)
throws NumberFormatException
文字列の一部を切り取って符号なしでLongにパースするメソッド
Java8 & Java9
Integerと同様なので省略
Byte の章
compareUnsigned
public static int compareUnsigned(byte x,
byte y)
Java8
// TODO:後で書く
Java9
// TODO:後で書く
Character の章
定数
追加された以下の4つの定数は Unicode 6.3 で新たに追加されたものらしいですが、
アラビア語やヘブライ語などを使う機会がなければ気にする必要はないようです
定数 Code Point 略記 DIRECTIONALITY_LEFT_TO_RIGHT_ISOLATE U+2066 LRI DIRECTIONALITY_RIGHT_TO_LEFT_ISOLATE U+2067 RLI DIRECTIONALITY_FIRST_STRONG_ISOLATE U+2068 FSI DIRECTIONALITY_POP_DIRECTIONAL_ISOLATE U+2069 PDI
codePointOf
public static int codePointOf(String name)
Java8
// TODO:後で書く
Java9
// TODO:後で書く
Character.UnicodeBlock の章
定数
たくさん
String の章
1.8時点では以下の2つのメソッドは親クラス(CharSequence)のデフォルト実装でした。
9からはおそらくこれ→ [JEP 254: Compact Strings] の影響で各クラスでOverrideする形に変わったと推測。
そのため使い方に変化はありません。
chars
public IntStream chars()
単純に文字コード値のストリームを生成する
Java8 & Java9
String characters = "defABC"; characters.chars() .mapToObj(c -> String.valueOf(Character.toChars(c)) + " is " + c) .sorted() .forEach(System.out::println);
codePoints
public IntStream codePoints()
サロゲートペアを考慮した文字コード値のストリームを生成する
Java8 & Java9
String characters = "𠮷野家の新メニュー 𩸽の開き定食 780円(嘘)"; characters.codePoints() .mapToObj(c -> String.valueOf(Character.toChars(c))) .filter(s -> s.length() > 1) .forEach(s -> System.out.println(s + " はサロゲートペア"));
StringBuffer の章
chars
Stringと同様なので省略
codePoints
Stringと同様なので省略
StringBuilder の章
chars
Stringと同様なので省略
codePoints
Stringと同様なので省略
Class<T> の章
forName
public static Class<?> forName(Module module,
String name)
Java9
// TODO:後で書く
getModule
public Module getModule()
Java9で新たに追加されたModuleクラスを取得するメソッド
Java9
// TODO:後で書く
getPackageName
public String getPackageName()
完全修飾パッケージ名を取得できます
Java8
String packageName = String.class.getPackage().getName();
Java9
String packageName = String.class.getPackageName();
ClassLoader の章
findClass
protected Class<?> findClass(String moduleName,
String name)
findResource
getUnnamedModule
getPlatformClassLoader
getDefinedPackage
getDefinedPackages
StrictMath の章
multiplyExact
multiplyFull
multiplyHigh
floorDiv
floorMod
Package java.math 編
BigInteger の章
定数
BigInteger.TWO
0,1,10は前からあったが2が追加された
BigInteger
public BigInteger(byte[] val,
int off,
int len)
sqrt
public BigInteger sqrt()
平方根を求めるメソッドが追加された
Java8
※処理はここを参考に作成しました
BigInteger number = BigInteger.valueOf(227529L); BigInteger a = BigInteger.ONE; BigInteger b = number.shiftRight(5).add(BigInteger.valueOf(8)); while (b.compareTo(a) >= 0) { BigInteger mid = a.add(b).shiftRight(1); if (mid.multiply(mid).compareTo(n) > 0) { b = mid.subtract(BigInteger.ONE); } else { a = mid.add(BigInteger.ONE); } } BigInteger sqrtNumber = a.subtract(BigInteger.ONE);
Java9
BigInteger number = BigInteger.valueOf(227529L); BigInteger sqrtNumber = number.sqrt();
sqrtAndRemainder
public BigInteger sqrtAndRemainder()
平方根とその余りを求めるメソッドが追加された
Java8
BigInteger number = BigInteger.valueOf(228483L); BigInteger a = BigInteger.ONE; BigInteger b = number.shiftRight(5).add(BigInteger.valueOf(8)); while (b.compareTo(a) >= 0) { BigInteger mid = a.add(b).shiftRight(1); if (mid.multiply(mid).compareTo(n) > 0) { b = mid.subtract(BigInteger.ONE); } else { a = mid.add(BigInteger.ONE); } } BigInteger sqrtNumber = a.subtract(BigInteger.ONE); BigInteger remainderNumber = number.subtract(sqrtNumber.multiply(sqrtNumber));
Java9
BigInteger number = BigInteger.valueOf(228483L); BigInteger[] sqrtAndRemainderNumber = number.sqrtAndRemainder(); BigInteger sqrtNumber = sqrtAndRemainderNumber[0]; BigInteger remainderNumber = sqrtAndRemainderNumber[1];
BigDecimal の章
定数
BigInteger.TWO
は追加されたがBigDecimal.TWO
は追加されてない。丸めモードの定数が非推奨になった
以下の定数全てが@Deprecated(since=“9”)となった。
丸めモード 説明 ROUND_CEILING 正の無限大へ近づける ROUND_FLOOR 負の無限大へ近づける ROUND_HALF_DOWN 五捨六入 ROUND_HALF_UP 四捨五入 ROUND_DOWN 切り捨て ROUND_UP 切り上げ ROUND_HALF_EVEN 末尾を偶数にする ROUND_UNNECESSARY 丸めない 上記に伴い上記を使用するdivideやsetScaleも非推奨となってます (丸めモードのEnumは1.5から存在するのだから早く削除すればいいのに……)
sqrt
public BigDecimal sqrt(MathContext mc)
平方根を求めるメソッドが追加された
Java8
※元の処理はここを参考に作成しました
BigDecimal number = new BigDecimal(2); int scale = 34; BigDecimal a = new BigDecimal(Math.sqrt(number.doubleValue()), MathContext.DECIMAL128); BigDecimal b = new BigDecimal(2); for(int tempScale = 16; tempScale < scale; tempScale *= 2) { a = x.subtract( a.multiply(a).subtract(number).divide( a.multiply(b), scale, RoundingMode.HALF_EVEN)); } sqrtNumber = a;
Java9
BigDecimal number = new BigDecimal(2); BigDecimal sqrtNumber = number.sqrt();
Package java.time 編
Java8で追加されため、まだ浸透していない感じのするパッケージ
ところどころ Joda-Time に似てる?
Clock の章
tickMillis
public static Clock tickMillis(ZoneId zone)
1分ごとに変わる時計 tickMinutes(ZoneId zone) や
1秒ごとに変わる時計 tickSeconds(ZoneId zone) は以前から存在したが、
1ミリ秒ごとに変わる時計を作るメソッドが新たに追加された。Java8
Clock baseClock = Clock.system(ZoneId.of("Asia/Tokyo")); Clock millisClock = Clock.tick(baseClock, Duration.ofMillis(1));
Java9
Clock millisClock = Clock.tickMillis(ZoneId.of("Asia/Tokyo"));
Duration の章
dividedBy
toSeconds
toDaysPart
toHoursPart
toMinutesPart
toSecondsPart
toMillisPart
toNanosPart
LocalDate の章
ofInstant
datesUntil
datesUntil
toEpochSecond
LocalTime の章
ofInstant
toEpochSecond
OffsetTime の章
toEpochSecond
Package java.util 編
Optional<T> の章
ifPresentOrElse
public void ifPresentOrElse(Consumer<? super T> action,
Runnable emptyAction)
isPresent()のTrue,False両方で処理を行いたい場合に便利になりました
Java8でこのメソッドのようなことをしようと試行錯誤している記事で下記を見つけました。
で、結局 Optional のインスタンスに対して ifNotPresent 的なことをやりたいときはどうしたらいいんですか? by @mdstoy さんJava8
public void hoge(Optional<String> optStr) { if (optStr.isPresent()) { Log.debug("Data is " + optStr.get()); } else { Log.error("error"); } }
Java9
public void hoge(Optional<String> optStr) { optStr.ifPresentOrElse( s -> Log.debug("Data is " + s), () -> Log.error("error")); }
stream
public Stream<T> stream()
Optionalで包まれているコレクションからnullでないものだけを簡単に取り出せるようになった
Java8
List<Optional<String>> list = new ArrayList<>(); list.add(Optional.of("文字もじ")); list.add(Optional.empty()); List<String> nonNullList = list.stream() .filter(s -> s.isPresent()) .map(s -> s.get()) .collect(Collectors.toList());
Java9
List<Optional<String>> list = new ArrayList<>(); list.add(Optional.of("文字もじ")); list.add(Optional.empty()); List<String> nonNullList = list.stream() .flatMap(Optional::stream) .collect(Collectors.toList());
or
public Optional<T> or(Supplier<Optional<T>> supplier)
Optionalから取り出さずに処理を続けたい場合の処理が楽に書けるようになった
Java8
Optional<String> base = Optional.of(null); Optional optStr; if (base.isPresent()) { optStr = base; } else { optStr = Optional.of("Empty"); }
Java9
Optional<String> base = Optional.of(null); Optional optStr = base.or(() -> Optional.of("Empty"));
Arrays の章
equals
Java8
// TODO:後で書く
Java9
// TODO:後で書く
mismatch
Java8
// TODO:後で書く
Java9
// TODO:後で書く
List<E> の章
of
static <E> List<E> of()
static <E> List<E> of(E e1)
static <E> List<E> of(E e1, E e2)
...
static <E> List<E> of(E e1, E e2, E e4, E e5, E e6, E e7, E e8, E e9)
static <E> List<E> of(E e1, E e2, E e4, E e5, E e6, E e7, E e8, E e9, E e10)
static <E> List<E> of(E... elements)
イミュータブルなリストが簡単に作れる
このメソッド既視感が・・・・・・ そうだGuavaだ!Java8
// TODO:Listのelementのネタを考える public static final List<String> HOGE_LIST = Collections.unmodifiableList( new ArrayList<String>() { { add("hoge"); add("fuga"); add("piyo"); } } );
Java9
// TODO:Listのelementのネタを考える public static final List<String> HERO_COLOR = List.of("hoge", "fuga", "piyo");
Set<E> の章
of
static <E> Set<E> of()
static <E> Set<E> of(E e1)
static <E> Set<E> of(E e1, E e2)
...
static <E> Set<E> of(E e1, E e2, E e4, E e5, E e6, E e7, E e8, E e9)
static <E> Set<E> of(E e1, E e2, E e4, E e5, E e6, E e7, E e8, E e9, E e10)
static <E> Set<E> of(E... elements)
イミュータブルなセットが簡単に作れる
Java8
public static final Set<String> HERO_COLOR = Collections.unmodifiableSet( new HashSet<String>() { { add("RED"); add("BLUE"); add("GREEN"); add("YELLOW"); add("PINK"); } } );
Java9
public static final Set<String> HERO_COLOR = Set.of("RED", "BLUE", "GREEN", "YELLOW", "PINK");
Map<K,V> の章
of
static <K,V> Map<K,V> of()
static <K,V> Map<K,V> of(K k1, V v1)
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2)
...
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5,
K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9)
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5,
K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10)
イミュータブルなマップが簡単に作れる
Java8
// TODO:Key-Valueのネタを考える public static final List<String> HERO_COLOR = public static final Map<Integer, String> HOGE_MAP = Collections.unmodifiableMap( new HashMap<Integer, String>() { { put(0, "hoge"); put(1, "fuga"); put(2, "piyo"); } } );
Java9
// TODO:Key-Valueのネタを考える Map<Integer, String> map = Map.of( 0, "hoge", 1, "fuga", 2, "piyo" );
ofEntries
static <K,V> Map<K,V> ofEntries(Map.Entry<? extends K,? extends V>... entries)
Java8
// TODO:後で書く
Java9
// TODO:後で書く
entry
static <K,V> Map.Entry<K,V> entry(K k,
V v)
Java8
Map.Entry<String, Integer> entry = new TreeMap<String, Integer>() { { put("A", 1000); } }.firstEntry();
Java9
Map.Entry<String, Integer> entry = Map.entry("A", 1000);
Objects の章
requireNonNullElse
requireNonNullElseGet
requireNonNull
checkIndex
checkFromToIndex
checkFromIndexSize
Enumeration の章
asIterator
Package java.util.jar 編
JarFile の章
JarFile
getVersion
isMultiRelease
Package java.util.stream 編
Stream<T> の章
以下の3つのメソッドについての投稿はすでにQiitaで投稿があったので詳しくは下記を参照ください。
Java 9 Streamに追加された3つの新機能 by @k--katoさん
takeWhile
default Stream<T> takeWhile(Predicate<? super T> predicate)
先頭から指定された条件に一致している間のストリームを取得できるメソッド
Java8
// TODO:動かないので後で直す List<String> list = Arrays.asList("ね", "こ", "か", "い", "た", "い", "ね"); boolean isTakeWhile = true; for (int str : list) { isTakeWhile = isTakeWhile && !str.equals("か"); if (isTakeWhile) { System.out.print(str); } }
Java9
List<String> list = Arrays.asList("ね", "こ", "か", "い", "た", "い", "ね"); list.stream() .takeWhile(s -> !s.equals("か")) .forEach(System.out::print);
dropWhile
default Stream<T> dropWhile(Predicate<? super T> predicate)
先頭から指定された条件に一致している間のストリームを取り除いたストリームを取得できるメソッド
Java8
List<String> list = Arrays.asList("ね", "こ", "か", "い", "た", "い", "ね"); boolean isDropWhile = true; for (String str : list) { isDropWhile = isDropWhile && !s.equals("か"); if (!isDropWhile) { System.out.print(str); } }
Java9
List<String> list = Arrays.asList("ね", "こ", "か", "い", "た", "い", "ね"); list.stream() .dropWhile(s -> !s.equals("か")) .forEach(System.out::print);
ofNullable
static <T> Stream<T> ofNullable(T t)
Java8
// TODO:後で書く
Java9
// TODO:後で書く
Collectors の章
flatMapping
static <T,U,A,R> Collector<T,?,R> flatMapping(Function<? super T,? extends Stream<? extends U>> mapper,
Collector<? super U,A,R> downstream)
Java8
// TODO:後で書く
Java9
// TODO:後で書く
filtering
static <T,A,R> Collector<T,?,R> filtering(Predicate<? super T> predicate,
Collector<? super T,A,R> downstream)
Java8
// TODO:後で書く
Java9
// TODO:後で書く