2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

Java入門・初心者質問スレ Part.10

1 :デフォルトの名無しさん (ワッチョイ 0fba-HyQo):2020/04/01(水) 15:09:15 ID:9COIb57q0.net
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

Java初心者のためのスレッドです。

※前スレ
Java入門・初心者質問スレ Part.9
https://mevius.5ch.net/test/read.cgi/tech/1552143555/ VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured

958 :デフォルトの名無しさん :2021/05/24(月) 02:29:52.62 ID:VswUGgIR0.net
if分は三項演算子で十分と言ってるようなもので結局書き手の好みでしかないよ

959 :デフォルトの名無しさん :2021/05/24(月) 02:32:12.56 ID:VswUGgIR0.net
コストの差なんて誤差みたいなものだしキャストの前と後どちらでヌルチェックするかにこだわるのは時間の無駄だよ、それよりも将棋のアルゴリズムを考えたが良い

960 :デフォルトの名無しさん :2021/05/24(月) 09:16:45.11 ID:Mu3SKiXg0.net
たったこれだけのイディオムで書く書かない考えるまでもないだろ。
if (o == null || getClass() != o.getClass()) return false;
GoogleのAutoなんとかやIDEが勝手に追加してくれる。

961 :デフォルトの名無しさん :2021/05/25(火) 03:40:08.61 ID:aPZR3p760.net
>>960
一般的に同じクラスじゃないとequals() を真にしないほうがいいのでしょうか。
いままであまり考えずに insuranceOf() で子クラスも ok にしてました。

962 :デフォルトの名無しさん :2021/05/25(火) 08:14:57.06 ID:NjlFkzs4d.net
method(Object o)
というメソッドを呼び出す時、String型だろうがInteger型だろうが引数に渡すことができますが

method(List<Object> oList)
というメソッドに対してList<String>やList<Integer>を引数に渡す事ができないのはなぜでしょうか?

963 :デフォルトの名無しさん :2021/05/25(火) 08:42:01.42 ID:9mK+q0F80.net
>>962
仕様で禁止
仮にmethod(List<Object> oList)の中でoList.add("test")ってやってたら、List<Integer>を渡されたら困るでしょ

これができないのと同じこと
List<Object> objList;
List<Integer> intList = new ArrayList<>();
objList = intList; // コンパイルエラー
objList.add("数字じゃない");

964 :デフォルトの名無しさん :2021/05/25(火) 09:30:33.81 ID:LcgTzRfK0.net
>>961
実用上、どっちでもいいんじゃね。
その子クラスでもequals()を結局実装することになるだろうし、
そもそもデータクラスで継承使いたくないのもあるし。

965 :デフォルトの名無しさん :2021/05/30(日) 17:47:48.28 ID:y07gAalSM.net
JPAのhibernate.ddl-auto=updateって使ってる?

966 :excel:2021/06/03(木) 19:30:58.15 ID:b6l61RPFG
Java入門
https://www.ceodata.com/java-intro/

967 :デフォルトの名無しさん :2021/06/04(金) 19:22:32.43 ID:m+7qhb/N0.net
質問です
var stream = IntStream.range(0, 10).boxed();
このStreamから要素数を指定してグルーピングして
[0,1,2],[3,4,5],[7,8,9]
というStreamを得たいのですがどのようにデータを操作すれば良いですか?
Streamではこういうことできなかったりしますか?

968 :デフォルトの名無しさん :2021/06/04(金) 22:35:57.03 ID:1mLYK0aA0.net
なぜ6が抜けてるのか...ミスだと仮定すると
Collection<List<Integer>> values = IntStream.range(0,10).boxed()
.collect(Collectors.groupingBy(i -> i / 3))
.values();
System.out.println(values);

実行結果
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]

969 :デフォルトの名無しさん :2021/06/04(金) 23:26:44.04 ID:m+7qhb/N0.net
>>968
ありがとうございます!
6はミスなので気にしないで大丈夫です
collectはStreamが終わってしまうんですよね
[0,1,2]...をStreamで逐次に読み出したいんですせっかくのStreamなので
グルーピングの処理を逐次でできるといんですけど

970 :デフォルトの名無しさん :2021/06/04(金) 23:44:45.71 ID:m+7qhb/N0.net
無理なんですかね、.NETのLINQのGroupByもシーケンス全部を読み取るようですし
条件を指定した場合は要素を全部見ないといけないんでしょうけど
先頭から数件ごとにグルーピングする場合は理屈としてはシーケンシャルに
読み取れるはずなのでStreamでやれればと思ったんですけど、難しいですねこれ
いったん諦めます、もしわかったかたおられたら教えて欲しいです
私はRxJavaを試してみます

971 :デフォルトの名無しさん :2021/06/05(土) 02:14:20.34 ID:vquxfJwH0.net
Iterator使ってみた
https://ideone.com/X97Qfj

972 :デフォルトの名無しさん :2021/06/05(土) 02:32:28.30 ID:3xxGtz3m0.net
>>970 すまんグルーピングじゃなくてただのwindowか...
RxJavaなら
Observable.range(0, 9).window(3).subscribe(....)
Streamだと今思いつかない。

973 :デフォルトの名無しさん :2021/06/05(土) 03:00:46.09 ID:MxOWvxhv0.net
>>971
すごいです!

>>972
ありがとうございます!

974 :デフォルトの名無しさん :2021/06/05(土) 18:40:06.43 ID:lg0pCfQ90.net
Kotlin もよろしく


Kotlinだとこうなる

val values = (1..10).chunked(3)
println(values)

出力
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]

975 :デフォルトの名無しさん :2021/06/05(土) 18:48:27.34 ID:MxOWvxhv0.net
>>974
Kotlinすごいです!

976 :デフォルトの名無しさん :2021/06/05(土) 19:12:38.58 ID:ZdF2VrafM.net
Kotlin使いてえ
来週会社に行ったらみんなJavaを書くのをやめてKotlinしか使ってない世界にならないかなあ
あ、転職すりゃいーのか

977 :デフォルトの名無しさん :2021/06/05(土) 21:27:20.46 ID:f5S9H8yw0.net
>>974
chunkedが返すのは残念ながらList<List<T>>

978 :デフォルトの名無しさん :2021/06/06(日) 04:18:19.03 ID:5/y0UvPV0.net
sequenceに変換してからchunkedを呼べばいいんじゃないの?

979 :デフォルトの名無しさん :2021/06/06(日) 05:26:06.72 ID:d9R15mSw0.net
>>977
Kotlin の場合は List のまま Java の Stream みたいに使えないか?
List のままでも特に困らないと思うんだが。何か問題ある?

980 :デフォルトの名無しさん :2021/06/06(日) 07:26:35.60 ID:lKbJDHfK0.net
>>979
さあ。
Streamが書き易さのためだけにできたと思っているのなら。

981 :デフォルトの名無しさん :2021/06/06(日) 10:23:11.57 ID:ybXqEAw1M.net
>>979
Kotlin使いなのにまさかの初歩的質問だな
StreamとSequenceはパイプライン処理を抽象化したもので遅延評価される
振る舞いが違うし性能に差が出る
シーケンス図で説明できると早いんだが
1万件のリストを10回ずつmapとfilterして結果の先頭1件目を取り出す場合、リストなら必ず1万件全てに対して処理が走る
ストリームなら最初の1件目がお目当ての品だった場合、ストリームから後続の値が取り出されることすらなく処理が完了する

982 :デフォルトの名無しさん :2021/06/06(日) 16:58:45.74 ID:yq1OPwe70.net
そういう速さを求めるんだったら
そもそもJavaとかKotlinとか使わないと思う

983 :デフォルトの名無しさん :2021/06/06(日) 18:00:10.88 ID:YnVE4/VRM.net
それってぼくは性能追求してないのでfor文で欲しいデータが見つかってもbreak全然書きませんって言ってるようなもんだ
Javaがよく使われる業務領域では社員数に応じてデータ量は増えるしRDBも絡む
小さなコレクションの基礎的な変形操作にしか活用してないならともかく、データの取り出し元がRDBだとか、繰り返し処理が全体に有意差を生むケースはいくらでも想定できる

984 :デフォルトの名無しさん :2021/06/06(日) 18:12:28.57 ID:d9R15mSw0.net
>>981
JavaのStreamってKotlinのSequenceと同じなの?

985 :デフォルトの名無しさん :2021/06/06(日) 18:42:58.32 ID:YnVE4/VRM.net
>>984
同じではないよ
役割、使い所はほぼ重複している

986 :デフォルトの名無しさん :2021/06/07(月) 01:52:52.07 ID:rSnCAv9Z0.net
>>983
大部分のJavaプログラマはそういう理屈が分かっていないと思う

987 :デフォルトの名無しさん :2021/06/07(月) 03:29:56.60 ID:I7XktEYA0.net
>>981
なんで唐突に Sequence の話になっているのか?

988 :デフォルトの名無しさん :2021/06/07(月) 10:46:02.62 ID:1cyU61QNM.net
>>987
Kotlinならこう書けるというソースに対してList型なのが残念という流れだからStreamと併記しているんだよ
流れや文脈が理解できないアスペ的な人かな?

989 :デフォルトの名無しさん :2021/06/08(火) 09:50:05.38 ID:CFn1v5aZa.net
>>985
遅延なのは同じでは?

990 :デフォルトの名無しさん :2021/06/08(火) 10:27:33.98 ID:ZnZwWBys0.net
>>989
遅延なのは同じだよ?(うぜえ

991 :デフォルトの名無しさん :2021/06/18(金) 12:15:21.33 ID:7QqIFMO20.net
質問です
static finalのフィールドにHashMapをセットして
getしか行わない場合は、マルチスレッドで使用しても安全ですか?

↓こういうふうに、コードはイメージです
class Test {
 private static final HashMap<String, String> map;
 
 public Test() {
  map = new HashMap<String, String>();
  map.put("a", "A");
  map.put("b", "B");
 }
 
 public String get(String key) {
  return map.get(key);
 }
}

992 :デフォルトの名無しさん :2021/06/18(金) 13:16:32.86 ID:I//zPTNq0.net
>>991
ダメです
コンストラクタではなくスタティックイニシャライザーで要素を追加してください

993 :デフォルトの名無しさん :2021/06/18(金) 13:59:22.34 ID:7QqIFMO20.net
>>992
ありがとうございます!
↓これなら良いですか? getはマルチスレッドでも安全ですか?
class Test {
 private static final HashMap<String, String> map;
 
 static {
  map = new HashMap<String, String>();
  map.put("a", "A");
  map.put("b", "B");
 }
 
 public String get(String key) {
  return map.get(key);
 }
}

994 :デフォルトの名無しさん :2021/06/18(金) 16:19:11.06 ID:deCUai8H0.net
valueがイミュータブルかどうかは無視していいの?
keyがイミュータブルでないってのはありえないだろうけど。

995 :デフォルトの名無しさん :2021/06/18(金) 16:29:51.99 ID:5G13yx380.net
いいだろ
これだとput公開されてないし

996 :デフォルトの名無しさん :2021/06/18(金) 20:53:55.88 ID:I//zPTNq0.net
>>993
いいね!

997 :デフォルトの名無しさん :2021/06/18(金) 21:48:38.57 ID:deCUai8H0.net
>>995
例の通りStringならね。
たとえば、Dateみたいなミュータブルだとどうなのって話。

998 :デフォルトの名無しさん :2021/06/19(土) 00:02:36.19 ID:/MxA8Vde0.net
>>993
たぶん安全だと思う
finalである時点で他スレッドからの即時の可視性も担保されてるはず
まあ思考を放棄してConcurrentHashMapを使ったほうが気が楽というのはある

999 :デフォルトの名無しさん :2021/06/19(土) 00:03:44.86 ID:/MxA8Vde0.net
>>997
もちろん書き換えれば壊れるけど、質問者のレベルを察するに知りたいことはそこじゃないと思う

1000 :987 :2021/06/19(土) 02:17:51.58 ID:mDxwNGWh0.net
みなさんありがとうございます!

1001 :デフォルトの名無しさん :2021/06/19(土) 14:01:39.40 ID:4UQ3DD5B0.net
>>997
それはConcurrentHashMap使っても無理でしょ
そのようなケースでは呼び出し側が読み取りから書き換えまでの範囲を排他するしかない

1002 :デフォルトの名無しさん :2021/06/20(日) 16:54:15.78 ID:Kf2rTDe5d.net
Flow APIでPub/Sub処理作ってデバッグしてみたんだけど
eclipseもintellijも設定したブレイクポイントで止まってくれない

具体的にはSubscriberインターフェースを実装したクラスでpublishした時に呼ばれるonNextメソッドの部分

処理中にいくつかコンソール出力を仕込んであって途中までは呼び出されてるんだけどそこから先で止まってるっぽくてデバッグしたいんだけど
確認できてるコンソール出力処理より前にブレイクポイントを設定しても止まってくれない

Javaの標準クラスを経由して呼び出される独自のクラスはデバッグできないとか制約あったりするんだろうか?

1003 :デフォルトの名無しさん :2021/06/25(金) 14:33:03.71 ID:sV38Jy47a.net
gradleでビルドしてるのだけどテストを除外してビルドするかんたんな方法はないの?
「テストを実行しない」ではなくテストコードそのものを生成物(jar)に入れたくないという意味で

1004 :デフォルトの名無しさん :2021/06/25(金) 21:26:23.89 ID:fsqrLronM.net
src/test 側に置いてたらソースセットの設定が効いてjarには入らないよ
jarに入る事故が起こってるのだとしたら多分スクリプトで余計なことしてる

1005 :デフォルトの名無しさん :2021/06/25(金) 23:07:44.76 ID:sV38Jy47a.net
>>1004
なるほどもともと入らないのか
知らなかった

1006 :デフォルトの名無しさん :2021/06/26(土) 14:11:00.72 ID:RjjpcdnV0.net
100000000000000000000000000000000000000000000!

1007 :2ch.net投稿限界:Over 1000 Thread
2ch.netからのレス数が1000に到達しました。

総レス数 1007
282 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★