JAVA関連のことを調べてみた2021年12月02日

JAVA関連のことを調べてみた2021年12月02日

Javaのラムダ式とStreamAPIとは

## 前提

以降の説明で表示するソースは全て [GitHub](https://github.com/thirdplay/java-stream) に上げてあります。


## 本記事の目的
`Java8` で追加された機能(関数型プログラミング・ラムダ式・Stream)というものについて、
難しい説明を極力省き、下記のような記述を読みこなせるようになるのが目標です。

“`java
persons.stream()
.filter(p -> p.getAge() >= 30)
.forEach(p -> System.out.println(p.getName()));
“`


## ラムダ式とは
インターフェースに `抽象メソッド` を1つだけ定義したものを `関数型インターフェース` と呼びます。
この `関数型インターフェース` の実装を、とことん簡潔に記述するのがラムダ式です。


たとえば、こんなインターフェースがあるとします。

“`java:Sample01.java
interface Iface1 {
pu

元記事を表示

midPointとIGA

今年もこの季節がやってまいりました。本年もOpenStandiaでAdvent Calendarを書いていきます。今年は特にテーマは決めずOpenStandiaのメンバが興味のある技術について25日間書いていきますのでよろしくお付き合いください!

# midPointについて
ということで、1日目はmidPointの話題です。midPointについては、一昨年のAdvent Calendar、昨年のAdvent Calendar、その他、折に触れて、OpenStandiaメンバが記事投稿しているのでご存知の方も多いかもしれません。

2019年のAdvent Calendar
https://qiita.com/advent-calendar/2019/midpoint-by-openstandia

2020年のAdvent Calendar
https://qiita.com/advent-calendar/2020/nri-openstandia

また、最近ですと、クラウドネイティブさん主催の須藤あどみん対談でご紹介させてもらって知って頂いた方もいるかもしれません。

202

元記事を表示

Javaのマルチスレッド実装例(後編)(排他制御編)

この記事は、[シアトルコンサルティング株式会社 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/seattleconsulting)の2日目の記事です。
こんにちは、シアトルコンサルティングの長岡です。

## はじめに
前回はプログラムをマルチスレッドで実行してみました。
[Javaのマルチスレッド実装例(前編)](https://qiita.com/Ryooooo/private/c4fdffa50ad31c972bad)
今回はマルチスレッドでプログラムを実行した際の注意点として上げられる、排他制御について書いていこうと思います。
今回も前回同様駆け出しエンジニアの方達にも理解できる内容となっております!

## なぜ排他制御が必要なのか?
前回の記事でも書きましたが、マルチスレッドの処理で同じオブジェクトにアクセスしてしまうと同じフィールドの値を書き換えてしまう為、最終的に期待した値が帰ってこないことがあります。
その為、同じオブジェクトにアクセスする場合はsynchronizedを使用し、排他制御を

元記事を表示

JavaでKotlinと同じくらい安全なコードを書く(後編)

この記事は`Kotlin Advent Calendar`の2日目の記事です。

https://qiita.com/advent-calendar/2021/kotlin

# 前書き
この記事は[JavaでKotlinと同じくらい安全なコードを書く(前編)](https://qiita.com/wrongwrong/items/9b1a5c4f76128b43fa3e)の続きです。

前編では`Java`で安全性を高めるための工夫として、以下の4点を書きました。

– `null`を安全に取り扱う
– メソッド・クラス・変数を基本的に変更できないようにする
– `Collection`を読み取り専用にする
– 一致を安全に判定する

後編では、これらが`Kotlin`でどのような表現になるかと、`Java`で実現した場合と比べた簡単さについて書きます。

# nullを安全に取り扱う
`Kotlin`では、`nullable`な場合型に`?`を付けます。

“`kotlin:Kotlin
// fooはnon-null, barはnullable、戻り値はnon-null
fun

元記事を表示

JavaからC言語を呼び出す

# 概要

JNAを使ってC言語を呼び出す方法をまとめました。

# 前準備

まず、JNAのライブラリをmavenなりbuild.sbtなりに追加します。

“`build.sbt
scalaVersion := “2.13.6”
libraryDependencies += “net.java.dev.jna” % “jna” % “5.9.0”
libraryDependencies += “net.java.dev.jna” % “jna-platform” % “5.9.0”
“`

# JavaからC言語を呼び出す

## Hello World的なプログラム

### C言語で共有ライブラリを作る

以下のようなプログラムを作成します。

“`hoge.c
#include

void hoge() {
printf(“ほげぇ\n”);
}
“`

そして、以下のコマンドで共有ライブラリを作成します。

“`sh
gcc -dynamiclib -o libhoge.dylib hoge.c
“`

### Java側の実装

Java

元記事を表示

テーブル更新時エラー 未完成

コンソールアプリケーション:社員情報管理アプリ

![Something went wrong]()

“`DBController.java

//更新機能
public static void Javadoc_update(String empId ,String empName_up, String gender_up, String birthday_up, String deptId_up)
throws ClassNotFoundException, SQLException {
Connection connection = null;
PreparedStatement preparedStatement = null;

try {

//DBに接続
connection = DBManager.getConnection();

preparedStatement = connection.prepareStatement(ConstantSQL.SQL_UPDATE1);

preparedSta

元記事を表示

JDBC基礎

“`DBManager.java

package jp.co.sss.jdbc.chapter01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBManager {
/** ドライバクラス名 */
private static final String DRIVER = “oracle.jdbc.driver.OracleDriver”;
/** 接続する DB の URL */
private static final String URL = “jdbc:oracle:thin:@localhost:1521:XE”;
/** DB 接続するためのユーザ名 */
private static final String USER_NAME = “jdbc_user”;
/** D

元記事を表示

JAVA 継承

“`Constant2301.java

package lesson23;

public class Constant2301 {
public static final String POLICE = “警察官”;
public static final String TEACHER = “教師”;
public static final String CHEF = “料理人”;
}

“`

“`Chef2301.java
package lesson23;

public class Chef2301 extends Worker2301 {

public Chef2301(String name, int age) {
super(Constant2301.CHEF, name, age);
}

public void doWork() {
System.out.println(“食事を作ります。”);
}
}

“`

“`Display2301..java
package lesson23;

public class Displ

元記事を表示

[Java]Android Fragment間のデータ受け渡し Bundle vs ViewModel

# 目的
Android, Javaで開発するにあたり、Fragment間のデータ受け渡しにBundleとViewModelどちらを使うべきか指標を明示する。
※ただしデータの値は変更しない前提です。

# 結論
Bundle:Fragment間で受け渡すデータ数が少ない場合
ViewModel:Fragment間で受け渡すデータ数が多い場合
のように使い分けるのが良いと思います。

# はじめに
初めてAndroid開発をしたときに、Fragmentから別Fragmentにデータを受け渡すとき、メジャーな方法としてBundleとViewModelがあると知りました。
両方使ってみて、それぞれの利点・欠点が少し分かったので、まとめてみます。
ちなみに筆者は最初はBundleを使いまくっていたのですが、以下に記載する欠点により、ViewModelをメインで使うようになりました。

# Bundle vs ViewModel
BundleとViewModelの利点・欠点をまとめます。

| |Bundle|ViewModel|
|—|—|—|
|利点|データの定義が不要

元記事を表示

[Java] 匿名クラスとインスタンスイニシャライザを使って初期化したデータのシリアライズに失敗した話

以前セッション管理の方法をメモリからDBに変更した際に、シリアライズ周りでエラーが起きたのでそれの原因と対策についてまとめる。

## 前提

Javaではデータの初期化に下記のような方法がある。

“`java
List animals = new ArrayList<>() {
{
add(“いぬ”);
add(“ねこ”);
add(“たぬき”);
}
};
“`

これは匿名クラスとインスタンスイニシャライザを使って初期化を行うという方法である。
通常Listの初期化には`List.of()`, `Arrays.asList()`などを使うが、これはimmutableなListを作成するため、後から要素の追加などが出来ない。
しかし、匿名クラスとインスタンスイニシャライザを使えばArrayListのサブクラスとしてインスタンスを作成するため、その後の要素の追加が可能になる。

## 起きたこと

Serializableを実装したSchoolオブジェクトをシリアライズしようとしたエラーが発生した。

“`java:School.java
/

元記事を表示

Javaのマルチスレッド実装例(前編)

この記事は、[シアトルコンサルティング株式会社 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/seattleconsulting)の1日目の記事です。

こんにちは、シアトルコンサルティングの長岡と申します。
この度、弊社シアトルコンサルティング株式会社でAdvent Calendarに参加することになりました。

TeamTech Move the WorldをMissionに掲げ、日々全力で業務に取り組んでおります!
少しでも興味を持って頂けたら下記のサイトを覗いてみてください!

コーポレートサイト

ホーム


Wantedly
https://www.wantedly.com/companies/seattleconsulting

よろしくお願い致します!
## はじめに
今回はJavaにおけるマルチスレッドの実装例を紹介します。
実務でシングルスレッドからマルチスレッドへの改修案件に携わったこともあり、振り返りついでに紹介します。
前編は

元記事を表示

JavaでKotlinと同じくらい安全なコードを書く(前編)

この記事は`Kotlin Advent Calendar`の1日目の記事です。

https://qiita.com/advent-calendar/2021/kotlin

この記事の内容は完全に`Java`ですが、現在`Java`を書いている人が`Kotlin`を導入するきっかけになることを目指して書きますのでご容赦ください。

# 前書き
`Kotlin`の`Java`に対する大きな利点の1つは、コードの安全性を簡単に担保できることです。
一方、安全性はアピールが難しく、「安全だから`Kotlin`を導入したい!」と主張しても「それ、`Java`でもできるのでは?」「どれ位メリット有るの?」と突っ込まれることも有るでしょう。

実際、自分が経験した限り`Java`でも安全なコードを書く(正確には、書ける環境を整える)ことは可能です。
一方、それを実現するには非常に大きな労力が必要で、現実的には安全性を妥協する部分が出てくると思っています。

このシリーズでは、`Kotlin`の導入材料の1つになれることを目指しながら、`Java`で安全なコードを書く大変さと、`Kotlin`で安

元記事を表示

Java 17で追加されたHexFormatクラス

この記事は[SRA Advent Calendar 2021](https://qiita.com/advent-calendar/2021/sra)の1日目の記事です。

こんにちは! 関西事業部の佐々木です。

#3年ぶりのLTSバージョン
2021年の9月にリリースされたJava 17は、2018年リリースのJava 11以来のLTSバージョンになります。
(実際にLTSとするかどうかはJDKのディストリビュータによりますが)
LTSなので当然適用されることも多くなりそうなJava 17ですが、どのような変更点があるのか気になるところです。
JDK 11からの全ての追加APIを知りたい場合は
https://docs.oracle.com/en/java/javase/17/docs/api/new-list.html
を参考にしてもらうとして、この記事では個人的によく使うことになりそうな **HexFormt** クラスを紹介したいと思います。

#16進数表記用のクラス
ここ数年私が関わっているプロジェクトでは「16進数表記」を使う機会がとても多く、バイト配列と16進数文字列

元記事を表示

僕とMavenの3650日

# Mavenって何

MavenはJavaのビルド・パッケージングツールです。誤解を恐れずにいうならばJavaプログラムの **「ビルドサイクルマネージャ」**ともいえます。今回はこのMavenについてまとめていきます。

いつものことですが、この文書には「本当ではないこと」が含まれています。理解しやすさを優先して経緯の時系列や仕様など丸めながら再考しています。読んでくれた方の興味関心に少しでも応えられたらうれしい限りです。

## Mavenと僕

僕の今の会社での最初の仕事は、Javaのプロジェクトをコンパイルすることだった。大規模な金融バックシステムをコンパイル、パッケージングするためのビルドツールとして僕はAntをを選んだ。Antはきちんと仕事をして、予定通り動作しリリースすることがきた。Subversionと連動したこの自動ビルド・リリースの仕掛けは、当時としてはちょっとした物だったけど、私のオリジナルだったことからなかなかに手離れが悪いものとなった。以後数年このビルドシステムの子守を僕がすることになってしまった。

**「Ant書けるなんてすごいじゃん。ところでMaven

元記事を表示

SpringSecurityログインページをカスタマイズする

#はじめに
SpringSecurity その2です。今回はログインページをカスタマイズしていきます。
完全に理解することができていない為、不備等あるかもしれませんがご了承ください。

#SpringSecurityシリーズ 項目表
|NO |タイトル |
|—-|————————–|
|その1|[SpringSecurity導入から基本的な認証フロー](https://qiita.com/ryo0527/items/dbdbb2a476cc74e9116b)|
|その2|[SpringSecurityログインページをカスタマイズする](https://qiita.com/ryo0527/items/2ee963cea31e82fd3dc5)|
|その3|DBアクセス処理実装 (現在執筆中)|

前回の続きからとなる為、その1を実装後にご覧ください。

#実装
###SpringSecurity設定
ログインページをカスタマイズするための設定を追加します。

“`java:SecurityConfig.j

元記事を表示

SpringSecurity 導入から基本的な認証フロー

#はじめに

Javaの学習を始めて最も躓いた`SpringSecurity`について調べ実装することができたので、記録として残しておきます。
完全に理解することができていない為、不備等あるかもしれませんがご了承ください。

#SpringSecurityシリーズ 項目表

|NO |タイトル |
|—-|————————–|
|その1|[SpringSecurity導入から基本的な認証フロー](https://qiita.com/ryo0527/items/dbdbb2a476cc74e9116b)|
|その2|[SpringSecurityログインページをカスタマイズする](https://qiita.com/ryo0527/items/2ee963cea31e82fd3dc5)|
|その3|DBアクセス処理実装|

#実装

### 依存関係の追加
SpringSecurityを使うには、`spring-boot-starter-security`を追加します。
※今回はmavenでの実装とします

元記事を表示

Java tomcat setenv.sh

“`bash

cd /usr/local

curl -OL –header “Cookie: oraclelicense=accept-securebackup-cookie” “http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz”

tar xvzf ./jdk-8u131-linux-x64.tar.gz

mv jdk1.8.0_131 java

export JAVA_HOME=/usr/local/java

echo $JAVA_HOME

/usr/local/java

/usr/local/tomcat/bin/

#メモリ見ときましょう
free

vi setenv.sh

-Xmx 最大ヒープサイズ(最大メモリ使用量)
-Xms 初期ヒープサイズ(初期メモリ使用量)
-Xss プロセスに割り当てられるスタックサイズ(228k以上必要になります)

参考にするとこんな感じかな

元記事を表示

[Effective Java 第3版]項目18 – 継承よりもコンポジションを選ぶ

継承はコードを再利用するには便利な機能ですが、常に既存のメソッドを継承し、拡張することがベストな方法とは限りません。
サブクラスとスーパークラスが同じ開発者の管理下にあり、同じパッケージ内にある場合は比較的安全といえます。
しかしパッケージをまたがり具象クラスを継承することは危険です。

#継承の不適切な使用例
HashSetが生成させてからいくつ要素が追加されたかを確認するため、getAddCountを実装します。
要素の挿入回数 addCountをフィールドに保持し、HashSetクラスの要素を追加できるaddとaddAllをオバーライドし要素が追加されるとaddCountをカウントアップします。

“`Java:InstrumentHashSet.java
public class InstrumentedHashSet extends HashSet {

// 要素の挿入回数
private int addCount = 0;

@Override
public boolean add(E e) {
addCount++;
return s

元記事を表示

break、continue、label、returnの使い方メモ

#目次
[1.break](#1-break)
[2.continue](#2-continue)
[3.label](#3-label)
[4.return](#4-return)
[5.さいごに](#5-さいごに)

#1. break
直前のループを抜ける。
##

“`java
List numberList = new ArrayList();
numberList.add(1);
numberList.add(2);
numberList.add(3);

// 拡張for文でnumberListをぐるぐる回す
for (Integer number : numberList) {
System.out.println(number);

// numberが2のとき直前のループを抜ける
if (number == 2) {
break;
}
}
“`
出力結果は下記の様になる。

“`
1
2
“`

ループが二重になっている場合はこちら。

“`java
List countList

元記事を表示

Javaのシステムでcsvからインポートする機能を実装する方法

まずはJSPから。

formは以下のように書く。

“`

“`

inputのタイプはfileに

“`

“`

JSPは以上です。
サーブレットはアノテーションのすぐ下に以下を追記

“`
@MultipartConfig(
maxFileSize=10000000,
maxRequestSize=10000000,
fileSizeThreshold=10000000
)
“`

doPostを以下のように記述

“`
protected void doPost(HttpServletRequest request, HttpServletResp

元記事を表示

OTHERカテゴリの最新記事