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

レス数が1000を超えています。これ以上書き込みはできません。
2020/04/01(水) 15:09:15.95ID:9COIb57q0
次スレを立てる時は本文の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
967デフォルトの名無しさん (ワッチョイ 3e01-O+lH)
垢版 |
2021/06/05(土) 03:00:46.09ID:MxOWvxhv0
>>965
すごいです!

>>966
ありがとうございます!
968デフォルトの名無しさん (ワッチョイ caad-p9zx)
垢版 |
2021/06/05(土) 18:40:06.43ID:lg0pCfQ90
Kotlin もよろしく


Kotlinだとこうなる

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

出力
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]
969デフォルトの名無しさん (ワッチョイ 3e01-O+lH)
垢版 |
2021/06/05(土) 18:48:27.34ID:MxOWvxhv0
>>968
Kotlinすごいです!
2021/06/05(土) 19:12:38.58ID:ZdF2VrafM
Kotlin使いてえ
来週会社に行ったらみんなJavaを書くのをやめてKotlinしか使ってない世界にならないかなあ
あ、転職すりゃいーのか
2021/06/05(土) 21:27:20.46ID:f5S9H8yw0
>>968
chunkedが返すのは残念ながらList<List<T>>
2021/06/06(日) 04:18:19.03ID:5/y0UvPV0
sequenceに変換してからchunkedを呼べばいいんじゃないの?
973デフォルトの名無しさん (ワッチョイ caad-p9zx)
垢版 |
2021/06/06(日) 05:26:06.72ID:d9R15mSw0
>>971
Kotlin の場合は List のまま Java の Stream みたいに使えないか?
List のままでも特に困らないと思うんだが。何か問題ある?
974デフォルトの名無しさん (ワッチョイ 8961-Fu2c)
垢版 |
2021/06/06(日) 07:26:35.60ID:lKbJDHfK0
>>973
さあ。
Streamが書き易さのためだけにできたと思っているのなら。
2021/06/06(日) 10:23:11.57ID:ybXqEAw1M
>>973
Kotlin使いなのにまさかの初歩的質問だな
StreamとSequenceはパイプライン処理を抽象化したもので遅延評価される
振る舞いが違うし性能に差が出る
シーケンス図で説明できると早いんだが
1万件のリストを10回ずつmapとfilterして結果の先頭1件目を取り出す場合、リストなら必ず1万件全てに対して処理が走る
ストリームなら最初の1件目がお目当ての品だった場合、ストリームから後続の値が取り出されることすらなく処理が完了する
2021/06/06(日) 16:58:45.74ID:yq1OPwe70
そういう速さを求めるんだったら
そもそもJavaとかKotlinとか使わないと思う
2021/06/06(日) 18:00:10.88ID:YnVE4/VRM
それってぼくは性能追求してないのでfor文で欲しいデータが見つかってもbreak全然書きませんって言ってるようなもんだ
Javaがよく使われる業務領域では社員数に応じてデータ量は増えるしRDBも絡む
小さなコレクションの基礎的な変形操作にしか活用してないならともかく、データの取り出し元がRDBだとか、繰り返し処理が全体に有意差を生むケースはいくらでも想定できる
978デフォルトの名無しさん (ワッチョイ caad-/d/6)
垢版 |
2021/06/06(日) 18:12:28.57ID:d9R15mSw0
>>975
JavaのStreamってKotlinのSequenceと同じなの?
2021/06/06(日) 18:42:58.32ID:YnVE4/VRM
>>978
同じではないよ
役割、使い所はほぼ重複している
2021/06/07(月) 01:52:52.07ID:rSnCAv9Z0
>>977
大部分のJavaプログラマはそういう理屈が分かっていないと思う
2021/06/07(月) 03:29:56.60ID:I7XktEYA0
>>975
なんで唐突に Sequence の話になっているのか?
2021/06/07(月) 10:46:02.62ID:1cyU61QNM
>>981
Kotlinならこう書けるというソースに対してList型なのが残念という流れだからStreamと併記しているんだよ
流れや文脈が理解できないアスペ的な人かな?
983デフォルトの名無しさん (アウアウウー Sa11-/d/6)
垢版 |
2021/06/08(火) 09:50:05.38ID:CFn1v5aZa
>>979
遅延なのは同じでは?
2021/06/08(火) 10:27:33.98ID:ZnZwWBys0
>>983
遅延なのは同じだよ?(うぜえ
985デフォルトの名無しさん (ワッチョイ 7601-req2)
垢版 |
2021/06/18(金) 12:15:21.33ID:7QqIFMO20
質問です
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);
 }
}
2021/06/18(金) 13:16:32.86ID:I//zPTNq0
>>985
ダメです
コンストラクタではなくスタティックイニシャライザーで要素を追加してください
987デフォルトの名無しさん (ワッチョイ 7601-req2)
垢版 |
2021/06/18(金) 13:59:22.34ID:7QqIFMO20
>>986
ありがとうございます!
↓これなら良いですか? 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);
 }
}
988デフォルトの名無しさん (ワッチョイ b761-hhAf)
垢版 |
2021/06/18(金) 16:19:11.06ID:deCUai8H0
valueがイミュータブルかどうかは無視していいの?
keyがイミュータブルでないってのはありえないだろうけど。
2021/06/18(金) 16:29:51.99ID:5G13yx380
いいだろ
これだとput公開されてないし
2021/06/18(金) 20:53:55.88ID:I//zPTNq0
>>987
いいね!
991デフォルトの名無しさん (ワッチョイ b761-hhAf)
垢版 |
2021/06/18(金) 21:48:38.57ID:deCUai8H0
>>989
例の通りStringならね。
たとえば、Dateみたいなミュータブルだとどうなのって話。
2021/06/19(土) 00:02:36.19ID:/MxA8Vde0
>>987
たぶん安全だと思う
finalである時点で他スレッドからの即時の可視性も担保されてるはず
まあ思考を放棄してConcurrentHashMapを使ったほうが気が楽というのはある
2021/06/19(土) 00:03:44.86ID:/MxA8Vde0
>>991
もちろん書き換えれば壊れるけど、質問者のレベルを察するに知りたいことはそこじゃないと思う
994987 (ワッチョイ 7601-req2)
垢版 |
2021/06/19(土) 02:17:51.58ID:mDxwNGWh0
みなさんありがとうございます!
2021/06/19(土) 14:01:39.40ID:4UQ3DD5B0
>>991
それはConcurrentHashMap使っても無理でしょ
そのようなケースでは呼び出し側が読み取りから書き換えまでの範囲を排他するしかない
2021/06/20(日) 16:54:15.78ID:Kf2rTDe5d
Flow APIでPub/Sub処理作ってデバッグしてみたんだけど
eclipseもintellijも設定したブレイクポイントで止まってくれない

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

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

Javaの標準クラスを経由して呼び出される独自のクラスはデバッグできないとか制約あったりするんだろうか?
2021/06/25(金) 14:33:03.71ID:sV38Jy47a
gradleでビルドしてるのだけどテストを除外してビルドするかんたんな方法はないの?
「テストを実行しない」ではなくテストコードそのものを生成物(jar)に入れたくないという意味で
2021/06/25(金) 21:26:23.89ID:fsqrLronM
src/test 側に置いてたらソースセットの設定が効いてjarには入らないよ
jarに入る事故が起こってるのだとしたら多分スクリプトで余計なことしてる
2021/06/25(金) 23:07:44.76ID:sV38Jy47a
>>998
なるほどもともと入らないのか
知らなかった
1000デフォルトの名無しさん (ワッチョイ 3fad-wfqF)
垢版 |
2021/06/26(土) 14:11:00.72ID:RjjpcdnV0
100000000000000000000000000000000000000000000!
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 450日 23時間 1分 46秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況