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

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

SpringのAutowiredはコンストラクタに書く

# 概要
SpringでDIをする時使うAutowiredのアノテーションは使いやすいし便利ですよね!
しかし、使い方が複数あり、どの使い方がいいのか迷うところではあります。
私はよくコンストラクタで使うのですが、そうなった経緯を整理したいと思います。

# Autowiredを設定できる方法
ざっくりと復習。Autowiredの設定方法は三種類あります。

## フィールドインジェクション
フィールドに直接書くタイプの宣言方法です。

“`java
public class A {
@Autowired
private B b;
}
“`

## コンストラクタインジェクション
コンストラクタに書くタイプの宣言方法です。

“`java
public class A {
private final B b;

@Autowired
public A(B b) {
this.b = b;
}
}
“`

## セッターインジェクション
セッターに書くタイプの宣言方法です。

“`java
public clas

元記事を表示

アルゴリズム体操8

#Find Maximum Single Sell Profit (Similar to Max-Subarray)

##説明
毎日の株価(簡単にするための整数)を要素とした配列が渡されて、最大の利益を得るために売買価格を返すアルゴリズムを実装しましょう。
前提条件として、買うと行為が売る行為よりも必ず先に来ることにします。
つまり、もし株価が最小の要素が配列の最後にあるとしても売る価格がその後にないので、その要素は買う価格としては認められません。
単一の売買利益を最大化する必要があります。利益を上げることができない配列が渡された場合は、損失を最小限に抑えようとします。 以下の例では、最大の利益を上げるための売買の価格が黄色と緑で強調されています。二番目の例は損失を最小限にしています。
Screen Shot 2019-12-21 at 11.14.07.pngprotocol buffeer migration from 2.x to 3.x

# @java.lang.Deprecated public static final com.google.protobuf.Parser
-> `public static com.google.protobuf.Parser parser()` が下に生えてます

# @java.lang.Deprecated public static Type valueOf
-> `@deprecated Use {@link #forNumber(int)} instead.`

TBD

元記事を表示

[Java] Stream API 入門

#Stream API #とは
[こちら](https://qiita.com/xrdnk/items/7fcc349929685f029440)の記事の続きみたいなものです.

Stream API はDataをPipeLine形式で処理するためのAPIです.
Collection,配列,ファイルなどデータの集合体(Data Source)から,個々の要素を取り出して
これを「処理の流れ」(Stream)に引き渡すための仕組みを提供します.

Streamに対して関数操作を行った結果をStreamで返す「中間操作」と
処理結果をDataとして返す「終端操作」があります.

中間操作も終端操作もメソッド引数は関数型インターフェースを取るものが多いため,
ここでラムダ式の知識が利用していくとスマートということになります.
![Stream API.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156186/f44579d8-ebab-2013-b88a-1a6de6a1b3bd.png)

#Stream

元記事を表示

java 繰り返し処理

今日はjavaの繰り返し処理について書きます。

# 繰り返し文とは
一定の指示を与えた命令を繰り返す処理のこと

実行結果をこう出す場合

[1]
[2]
[3]
[4]
[5]

通常だと

“`java:通常処理
public class PrintFiveStars { |
public static void main (String[] args){ |
System.out.println(“[1]”);
System.out.println(“[2]”);
System.out.println(“[3]”);
System.out.println(“[4]”);
System.out.println(“[5]”);
}
}
“`

繰り返し構文を使用した場合
5行ほどで済みます。
これを応用すれば、100でも1000行でも
編集するだけで処理を行うことができます。

“`java:繰り返し処理

public class

元記事を表示

Python Javaでどうやったらマネタイズできるか戦略

#Python Javaでどうやったらお金になるか?
##フレームワークではなくて言語から勉強する。
PythonならPython JavaならJava
##プログラム作成の仕事を探す。
実務しながらの方がやはり伸びると思う。
テストではなくてプログラミングがある仕事を探す。
どっちが偉いってことはないけど違う仕事だと思う。
##JavaはフレームワークはSpring+ORマッピングだから
お金にはなるけど、世の中のいろんなツラミを引き受けてるせいか
Java・Springに燃えてる人ってあんまり見ないけど
心を込めてやろうと思うね。なんか例が作れたらと思う。
##Pythonは
Flaskの公式見たり、ソース見たり
Flask + chabot
勉強
既存の物を使って研究してみるとか
→ IBM Watson等

Flask + APIとか
フレームワークも改造できたりするところまでいけたらと思うね。

元記事を表示

ガンツ7回クリアの岡八郎をJavaを使って一般化しました

## はじめに
初投稿です。ITエンジニア1年目です。ご容赦ください。
この記事は超初歩的なJavaの文法しか使いません。
## GANTZとは
いきなりですが、みなさん**GANTZ(ガンツ)**って漫画知ってますか?
詳細はここでは述べませんが、強化スーツみたいのを着た主人公たちがめちゃくちゃ強い化け物と戦う、みたいな漫画です。面白いです。
ガンツの世界では敵がめちゃくちゃ強くて気をぬくとすぐに死んでしまうハラハラした世界なのですが、大阪編という話ですごい登場人物が出てきます。それが**岡八郎**です。
## 岡八郎とは
GANTZの世界で戦闘に勝って特典を貯めると、GANTZをクリアすることができます。
一回クリアすると
「元の世界に帰る」「誰かを生き返らせる」「強い武器を手に入れる」
の3つから1つを選択することができます。
普通に考えたら全クリしたら元の世界に帰りたいですよね。死にたくないし。
でも岡八郎はすごいです。
なんとあのGANTZを7回もクリアしているのです。すごすぎる。
そして毎回クリアするごとに新しい武器を手に入れているので**岡八郎**はめちゃくちゃごつい装備

元記事を表示

AWSからリリースされた、JavaでDeepLearningが扱えるライブラリDeep Java Library(DJL)に触れてみる

# 概要
2019/12/03AWSよりJava で機械学習モデルを開発およびデプロイするDeep Java Libraryが発表されました。


DJL - Deep Java Library

ほんの少しですが、触ってみましたので紹介します。
なお、事前知識としては、Javaは普段使っているが、ML/DLの知識は自身ほぼゼロです。


2019年フレームワークのトレンドが見れるサイトの紹介

# hotframeworks.com
URLはこちらになります。
http://hotframeworks.com/
![a.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282788/1b52681e-2325-a75b-d2cb-214d3c23e526.jpeg)

元記事を表示

既存JavaシステムのDBに対して簡単にWebAPIを生やすことを夢見て

# 背景とやりたいこと
既存のモノリシックなシステムのDBが持つデータに対して、REST APIでアクセスしたいとき、どうしますか?
そのシステム担当にREST API公開お願いしますと頼もうとすると、ちょっとよく分からないし、基盤影響とか、いろいろ考えないといけないし、それより今忙しいし、、と真面目に掛け合ってくれないということがあるかもしれません。

そんなときに、既存の環境を使いつつすごく簡単にREST形式のWebAPIを生やすことができないか?と考えました。

# 過去の検討

自身、2017年ごろに一度調べたことがあったのですが、その際の構成は以下の感じです。

– 既存システム構成の例
image.png

– REST API生やした後の構成
image</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Java</div>
<div class='tag-cloud-link'>WebAPI</div>
<div class='tag-cloud-link'>DB</div>
<div class='tag-cloud-link'>REST-API</div>
<div class='tag-cloud-link'>SpringBoot</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/omix222/items/d31954a00113da5a5617'>元記事を表示</a></div>
<h3 id=(超初心者向け)D言語で考えるgetter/setterとproperty

Javaのgetter/setter長くてUZEEEEE!!!!と思っていたら、[こういう記事](https://qiita.com/katolisa/items/6cfd1a2a87058678d646)を見つけたのでちょっと考えさせられました。そこで大好きな(得意ではない)D言語でちょっと考えてみようと思います。

– OpenJDK 1.8.0_222
– gdc 8.3.0

#Javaのgetter/setterについて
多摩科技ACなので、一応オブジェクト指向とJavaの説明をします。本題は[ここ](#d言語で)からです。

オブジェクト指向はソフトウェア設計の指針の一つで、「あらゆる物はオブジェクト(関連するデータをひとまとまりにし、それに対して代入、変換、関数などを行える実体)である」という考え方のことです。
初めてその言葉を使ったアラン・ケイによれば、

1. すべてはオブジェクトである。
2. オブジェクトはメッセージの受け答えによってコミュニケーションする。
3. オブジェクトは自身のメモリーを持つ。
4. どのオブジェクトもクラスのインスタンスであり、クラスもま

元記事を表示

段階的に理解する O/R マッピング

# はじめに

## O/R マッピングとは

O/R マッピングとは、一言で言えば、オブジェクト指向プログラミング言語においてリレーショナルデータベースのレコードを通常のオブジェクトとして操作する方法である。より詳細な定義を述べるより、実際のコードを見たほうがわかりやすいだろう。以下に、低レベルの JDBC API の利用例と、高レベルの O/R マッピングフレームワークの代表格である JPA の利用例を挙げる。

“`java
public List findByProjectId(long projectId) {
String query = “select id, title, description from issue where project_id = ?”;
try (PreparedStatement ps = connection.prepareStatement(query)) {
ps.setLong(1, projectId);
List issues = new ArrayList<>();

元記事を表示

【初心者向け】Java8以降のStreamAPIの運用方法について

# Java8以降のStreamAPIとの付き合い方

## はじめに

### 概要

Javaで関数インターフェースを利用できるようになってから随分経ちます。結構最近だと思っていたのですが、5年も前なんですね。そんな関数インターフェースとStreamAPIですが、「分かりやすい」という人と「分かりづらい」という人で結構差があるんじゃないかなと思っています。そんな中でどのようにStreamAPIと付き合っていくかの参考になればと思って書きます。

### 前提

+ チーム全体が若い(全員Javaでの開発経験3年以下)
+ Java7ベースでの研修を受けており、Java8で追加された標準APIについては学んでいない
+ 開発で使用するのはJava8以降なのでJava8のAPIをガシガシ使うお

要するに関数インターフェースもStreamもOptionalも初めましてな人たちが、Java8で開発してるよという感じです。

### 結論

+ 中間操作(`Stream#map`や`Stream#filter`)の引数はメソッド参照で書く
+ `sort`で複数のキーを使って並び替えるなら

元記事を表示

JUnit 5 + Gradle による Java の自動テスト導入

## 概要
– JUnit 5 + Gradle による Java の自動テストについて基本的なサンプルを書く

## Junit 5 とは

– JUnit は Java の自動テスト用フレームワーク
– JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
– JUnit Platform: テスト実行プラットフォーム
– JUnit Jupiter: テストコード実装用APIとテストエンジンを提供
– JUnit Vintage: JUnit 3 と JUnit 4用のテストコード実装用APIとテストエンジンを提供

## 今回の環境
– Java 11 (OpenJDK 11.0.2)
– JUnit Platform 1.5.2
– JUnit Jupiter 5.5.2
– Gradle 6.0.1

## JUnit 5 + Gradle の基本的なサンプル

### ソースコード一覧

“`
├── build.gradle
├── settings.gradle
└── src
├── main

元記事を表示

MyBatis Dynamic SQLで柔軟なORマッピング実装をしてみた

# MyBatis Dynamic SQLを使ってみよう!

今回はMyBatis Dynamic SQLを使ってSQLを発行し、データを取得する実装を試してみました!

業務でバリバリ使うことになるかもなので、備忘録として残しておきます。
実装形式としてはSeasar2のS2JDBCに似ていて、複数のメソッドチェインを行うことで発行するSQLを作成しています。

## 実行準備

用意したテーブルはこんな感じでシンプルなものを用意しました。
データはテキトーに数件登録しておきます。

“`sql
CREATE TABLE “MEMBER” (
“ID” NUMBER(8,0)
, “BLOOD” VARCHAR2(20 BYTE)
, “NAME” VARCHAR2(20 BYTE)
, “CORP” VARCHAR2(20 BYTE)
);
“`

Entityもテーブル構成に合わせて作成します。

“`java
public class Member {

private Integer id;

private String name;

p

元記事を表示

絶対に二重サブミットを許さない友の会

MDC Advent Calendar 2019 の20日目です。投稿が21日になってすみません。割腹します。
「MDC」がどういう意味なのかよくわからなかったので、**M**ajide **D**ouble-submit-ni **C**urushinderuの略だと信じてこの記事を書いています。間違ってたら教えてください。
おふざけ枠として「API Gatewayで高輪ゲートウェイ作ってみた」とかやろうとしたんですが、
高輪のことをよく知らなかったのでやめました。二重サブミットの話をします。

## 二重サブミットとわたし
早速ですが。
人生、誰でも一度は二重サブミットと真剣に向き合う時期があると思います。

二重サブミットはその名の通り二重で`submit`をすることですが
「二重登録」とか「二重更新」とか「二重リクエスト」とかの言葉も概念としては同じです。
``を二連打するとか、POSTのリクエストを二連送信するとかの手段はどうでもよく
本質的には「**二重で実行されるとシステムとして困る操作を二重ですること**」と考えてよいと思います

元記事を表示

アルゴリズム体操7

#Move zeros to left

##説明
一つの整数型の配列が渡されます。
配列内の他の要素の順序を維持しながら、0に等しいすべての要素を左に移動させるアルゴリズムを実装しましょう。
次の整数配列を見てみましょう。

Screen Shot 2019-12-20 at 17.42.26.png

すべての0に等しい要素を左に移動すると、配列は次のようになります。(0以外の要素の順序を維持する必要があります)

Screen Shot 2019-12-20 at 17.44.09.pngjava 変数宣言

変数宣言についても書きます。

# Javaの変数宣言(識別子)
Javaのプログラムの中で変数を使うためには
まずはじめに「変数の宣言」というものを行わなければならない。

プログラムの中で、変数を使うためには名前が付けられていなければならない。
この変数の名前のことを識別子と読んでいる。

また、変数には扱うデータの種類によって型が決まっている。この型を指定しなければならない。

## 基本
基本の書き方はこちら

“`bash
型名 識別子;
“`

例:年齢の場合
intで数字の型を指定
ageで変数名(識別子)を指定

“`java
int age;
“`

## 変数に値を代入する
Javaの場合は以下のように記号「=」(イコール)を使用して
左側に宣言した識別子で表される変数名を、右側に式を記述する。

尚、変数と「=」の間のスペースはあっても無くてもどちらでも問題ない。

“`bash
変数名(識別子) = 式;
“`

例:30と指定
ageという変数に、30という値を代入することを意味している。

“`java
age = 30;
“`

## 変

元記事を表示

java コメントの書き方

今日はちょっと時間がないのでコメントの書き方だけ
さらっと書きます。

# コメントアウト1行のみ
1行だけのコメントは次のように書くことができる。

“`java:一行のみ
// (コメント内容)
“`

# コメントアウト複数行
/* ~ */で囲んだ部分がコメントとなる。
「/*」がコメントの開始で、「*/」がコメントの終了という意味です。

“`java:複数行
/*
コメント内容
*/
“`

元記事を表示

Spring WebFluxのチュートリアルをやってみる

## はじめに
初投稿ということで拙い記載となっている点はご容赦ください。:bow_tone1:
『Spring WebFlux』というワードを最近知ったので、チュートリアルを通して触れてみようと思います。

## WebFluxとは
[Spring WebFlux](https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#webflux)はSpringが提供するWebフレームワークであり、ノンブロッキングな処理を行うことができます。
ざっくりですが、『スレッドを節約しつつ、効率よく処理ができる仕組み』だと理解しました。

## 今回やること
以下のページにあるチュートリアルをやってみたいと思います。
[Building a Reactive RESTful Web Service](https://spring.io/guides/gs/reactive-rest-service/#initial)

開発環境
・Visual Studio Code
・AdoptO

元記事を表示

OTHERカテゴリの最新記事