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

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

Javaで作る自動販売機のサンプル(クラス分け)

前回書いた自動販売機:https://qiita.com/TakumiKondo/items/e93aa60031e2fe09d969
をクラス分けしました。

“`Items.java
package vm;

import java.util.HashMap;
import java.util.Map;

public class Items {
private Map items; // 商品リスト
private Map availablePurchases; // 購入可能商品

// コンストラクタ(商品リストの初期化)
Items() {
this.items = new HashMap();
items.put(“コーラ”, 100);
items.put(“オレンジジュース”, 120);
items.put(“水”, 80);
}

// 最低購

元記事を表示

Rotate Array

# Rotate Array

##説明

整数型の配列と整数N(回転数)の二つの引数が渡されたとき、配列の要素をN回(マイナスは左へ、プラスは右へ)
回転させた配列にしよう。

##例
以下の配列が渡されたとしよう。
![Screen Shot 2019-12-18 at 10.24.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405022/538e236c-ffcf-ac2a-29ca-d16bd3e3fb39.png)
もし、回転数Nが−1の時は、全ての要素が左側へ一つずつずれる。
![Screen Shot 2019-12-18 at 10.25.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405022/512da7cf-f899-1fb8-590c-ae7ac2d118a6.png)
また、もし回転数Nが2の場合は、全ての要素が右側へ一つずつ二回ずれる。
![Screen Shot 2019-1

元記事を表示

AspectJが書き換えたコードを無理やり覗いてみた

この記事は、[富士通システムズウェブテクノロジー Advent Calendar](https://qiita.com/advent-calendar/2019/fsweb)の19日目の記事です。
(お約束)本記事の掲載内容は私自身の見解であり、所属する組織を代表するものではありません。

## はじめに
この記事は、JavaでAOPを実現するOSSであるAspectJが、どんなコードを生成しているのかを目視確認してみよう!というものです。

AOP自体は昔から使われている技術ですが、個人的にはあまりプロジェクトで使われている印象がありませんでした。が、最近になって自分の周りでAOPを使っているプロジェクトをちらほら見かけるようになり、今後使う人が増えるかも?と思い記事を書いてみました。

AOPは使ってみると便利なのですが、正直裏で何が起こっているのかよくわからない部分があります。
こういうところの理解を深めるために、本記事ではAOPでウィービングした際のコードを覗いてみます。

## 前提知識
AOPってなんぞや!
みたいな話は既にいろんな記事でまとめられているので割愛します。

元記事を表示

Java側からManagedBeanを取得する[JSF]

#目的
JSFを使っているが、ManagedBeanをJava側から取得したい。

? 「普通にインスタンス生成すりゃええんじゃ?」

じゃなくて ManagedBeanとして取得したいんじゃ!

というときの解決法

#解決

とりあえず以下にBeanの例を書きます。
中身はそれっぽく適当に書いています。

“`java:HogeBean.java
/* ↑省略 */
@Named(“hoge”)
@ManagedBean
@ViewScope
class HogeBean implements Serializable {

private static final long serialVersionUID = 1L;
private String fuga;

@PostConstruct
public void init() {
fuga = “アイス”;
}

public String getFuga() {
return fuga;
}
}
“`

で、取得する方法の例

元記事を表示

Hello Java Lambda

簡単な要件を満たすコードを書くにあたって、Lambda を使わないケースと使うケースを比較してみます。
以下のような数字のリストを用意し、100以上の分だけ2倍したものを合算する処理を考えてみます。
仕様:100以上の分だけ2倍したものを合算する

“`java:number-list
final List numbers = Arrays.asList(50, 100, 10, 400, 120, 30, 220);
“`

##### Lambda を使用しないケース
たとえば、リスト内の値を一つずつチェックし、もし100以上であればその数値を2倍し、total に加算するという流れが考えられます。
これ位の計算であれば、シンプルで分かりやすく大きな問題はないと思われます。
ただ、仕様(100以上の分だけ2倍したものを合算する)に対して、それを実現する一つの方法として ”数字を一つずつチェックする” というエンジニアのアイデアがそこに挟まれるため、やや誤解を与えやすいコードになる可能性があります。

“`java:without-lambda.java
in

元記事を表示

java 実践編 その1

今日はjavaの簡単な扱いかたについて
書きます。

なお先日の投稿であるJDKについて終わっている前提で書いて行きます。

# 基本手順
少しjavaはrubyと比べて手間がいるコードなので
手順を書いて行きます。

1,.javaファイルを作成してjacaコードを書く
2,上記のファイルをjavacコマンドでclassファイルを作成する
3,クラスファイルを実行する。

これが簡単な流れです。
基本コードを書いてもコンパイルしてクラスファイルを作らないと
javaは使えないのでjavacコマンドでクラスファイルに変換作成するわけです。

## 基本書式
まず基本的な書式を書いて行きます。
他の言語と比べ前準備のコードがかなり長いです。

“`java:基本書式.java
class ファイル名(クラス名){
public static void main(String[] args){
(処理内容)
}
}
“`

例はこちら

“`java:HelloJava.java
class HelloJava {
public static void main

元記事を表示

ReactNative AndroidのBrige解説

## 機能
– Native Modules
出来ること
・関数の作成
・イベントの通知
・コールバック

– Native UI Components
出来ること
・Viewの作成
・Viewのイベントの通知

## Native Modules
ダイアログを表示するModuleを例にします。

**[機能]**
1, Androidのダイアログを表示する。(関数の作成)
2, ダイアログの”OK”ボタンがクリックされたらコンソールに”true”が表示される。(イベントの通知)
3, “DATE”ボタンがクリックされたら現在時刻が表示される。(コールバック)

“`java:DialogModule.java
public class DialogModule extends ReactContextBaseJavaModule {
// コンストラクター
public DialogModule(@NonNull ReactApplicationContext reactContext) {
super(reactContext);
}

元記事を表示

ラムダ式をシリアライズして異なるJVM上で実行してみる

[Java Advent Calendar 2019](https://qiita.com/advent-calendar/2019/java) の19日目です。

Java8から導入されたラムダ式はシリアライズが可能で、先達の記事の通り様々な実装パターンがあります。

* [Lambda式をシリアライズする – CLOVER?](https://kazuhira-r.hatenablog.com/entry/20150425/1429969937)
* [シリアライザブルなラムダ式 — 裏紙](https://backpaper0.github.io/2015/08/25/serialized_lambda.html)
* [Javaラムダ式メモ(Hishidama’s Java8 Lambda Expression Memo)](http://www.ne.jp/asahi/hishidama/home/tech/java/lambda.html#h_serialize)

シリアライズ可能ということはデータストアにロジックを永続化、異なるJVMへの移送・実行が可能という

元記事を表示

PythonとJAVAの実行速度を比較する

# はじめに

一般にPythonは遅いと言われているが、実際に他言語と比べてどれだけ遅いのかを調べてみた。

# 測定方法

PythonとJAVAの2言語間で、円周率を近似するプログラムを走らせる。
それぞれの差から実行速度が何倍異なるかを調べた。

# 結論

JAVAのほうが、Pythonより約60倍速いと思われる。
ただし、円周率の近似の結果値をうまく出力できなかったため、本記事だけではJAVAのほうが速いと主張できない。

# やったこと

### 近似式
ライプニッツの公式から円周率を近似した。

“`
π = 4{(1-1/3)+(1/5-1/7)+…(1/[4n+1] – 1/[4n+3] ) }
“`

で求まるらしい。

### 実行時間の測定方法
JAVA、Pythonともに、

(計算の実行終了時刻 – 計算の実行開始時刻)

を用いて実行時間を求めた。

### Pythonのコード

“`python

import time

num = 100000000 # 計算の繰り返し回数
pi = 0 # 円周率の近似値

if __nam

元記事を表示

凝集度・結合度・循環的複雑度

# 概要
メンテナンスしやすい/テストしやすいコードを書くための知識として以下を紹介してます。

* 凝集度
* 結合度
* 循環的複雑度

ちなみに、言語はJavaで書いてます(他の言語は読み替えて下さい)

あと結合度の部分はもしかしたら間違えた理解してるかも。その場合ご指摘ください。
(以外と本やサイトによって書かれてることがバラバラなので…(´・ω・`))

# それぞれの説明
## 凝集度
モジュール強度とも言われる。あるコードがどれだけそのクラスの責任分担に集中しているかを示す尺度。
**ひとつの役割のためだけに存在(全てのメソッド群がその役割のためだけに存在)しているクラスは凝集度が高い。**
逆に、各メソッドに共通性がなく、様々な役割を担っているクラスは凝集度が低い。

### 凝集度が低いと何が悪いか
* そのクラスが何をするものなのか理解するのが難しくなる
* 保守やテストが難しくなる
* 再利用しづらくなる

#### 凝集度が低いクラスはメンバ変数を多く持つ傾向がある

凝集度が低いと、メンバ変数が多くなる傾向がある。メンバ変数はクラスの状態そのものであるため、

元記事を表示

【2019年12月版】Liferay7.2のGraphQLにOAuth2トークン付きでアクセスしてみた結果

# Liferay 7.2 で GraphQL の API が公開されたので叩いてみる

[Liferay 7.2](https://www.liferay.com/)[^1] から GraphQLが公開された模様です。

– [New GraphQL APIs in Liferay 7.2](https://liferay.dev/blogs/-/blogs/new-graphql-apis-in-liferay-7-2)
– [GraphQL APIs | Liferay Documents](https://portal.liferay.dev/docs/7-2/frameworks/-/knowledge_base/f/graphql-apis)

[^1]: モジュールやソースの入手は [SourceForge の Liferay Portal](https://sourceforge.net/projects/lportal/) もしくは [Github の Liferay Portal](https://github.com/liferay/liferay-portal)

元記事を表示

Javaユーザーがよく見るイベントサイトは? connpassとDoorkeeperで収集したデータをRevealで可視化してみた。

# はじめに

JavaユーザはーTECH系イベントに参加するとき、どんなイベントサイトを参照しているのか?
有名なTECHイベントサイトの”connpass”と”Doorkeeper”のJavaコミュニティの数値取得し、Revealでダッシュボードを作ってみました。
(2019年12月の情報に基づいた記事です)

# 対象サイトを選定
## 有名なIT系イベントサイトをリストアップ
まずは、私も利用経験のあるイベントサイトをリストアップ。

– connpass
– Doorkeeper
– ATND
– TECH PLAY

## 最終的に2つ(connpass と Doorkeeper)に絞り込み
それぞれのサイトでJavaの情報を収集し、
そこそこのボリュームが得られたconnpassとDoorkeeperを対象にデータを収集することにしました。

– connpass
 カテゴリ「Java」から結果を取得。9コミュニティがヒットしたのでこれらを分析対象に決定。
https://connpass.com/category/Java/

– Doorkeeper
 トピック「J

元記事を表示

Find the Smallest Common Number

# Find the Smallest Common Number
昇順でソートされた3つの整数配列から、3つの配列すべてに共通する最小の数を見つける必要があります。

##説明

**昇順**で並べ替えられた3つの整数配列が与えられ、3つの配列すべてに共通する最小の数を見つけるアルゴリズムを実装する。

以下の3つの配列を見てみましょう。解は**6** で、すべての配列に共通する最小数です。
![Screen Shot 2019-12-17 at 19.16.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405022/57a5da54-3169-91bb-4da4-5ab29fc16253.png)

![Screen Shot 2019-12-17 at 19.16.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405022/1815b9f9-194d-64d5-4b99-18145d683aa1.png

元記事を表示

アルゴリズム Search Rotated Array

#Search Rotated Array
任意の数だけ右へ回転されたソート済み配列と、指定された数(key)が渡されて検索します。

## 説明
任意の数だけ回転されたソート済み配列で、指定された数(key)を検索します。 Keyが存在しない場合は-1を返します。 配列に重複が含まれていないと仮定します。
以下は、回転前の元の配列です。
![Screen Shot 2019-12-17 at 15.15.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405022/9b6a965b-f871-213e-edce-03834e801332.png)
この配列で6回、回転を実行すると、次のように変わります。
![Screen Shot 2019-12-17 at 15.18.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405022/d31c4003-7270-ee87-2111-5eb94e3cf8aa.png

元記事を表示

インポート宣言/パッケージ宣言

個人的な勉強のためにまとめました

##インポート宣言/パッケージ宣言

###パッケージの目的

パッケージの目的は3つ

①名前空間を提供し、名前の衝突を避ける
②アクセス修飾子と組み合わせてアクセス制御機能を提供する
③クラス分類を提供する

①は、もし、クラス名が重複してしまうとコンパイラやJVMは、どちらのクラスを利用すればよいか判断できないので、このような事態を防ぐために、コンパイラやJVMは、クラスを「**パッケージ名.クラス名**」の**完全修飾クラス名**で扱うから
 ※慣習としてドメイン名を逆にしたものがパッケージ名に使われる

②は、クラスを複数のパッケージに分けると、パッケージ単位でアクセス制御ができるようになる

 例)publicなSampleクラスの宣言

“`Sample.java
package jp.co.xxx;
public calss Sample{
//any code
}
“`

 例)Testクラスの宣言

“`Test.java
package jp.co.xxx;
calss Test{
//any c

元記事を表示

JavaでExcelデータの取り込み2

前回の続きで今回もApachePOIの内容です。

※前回
https://qiita.com/Mk-4000/items/908266355307bcaf6993

#セルの値の取得について
前回のセルの値の取得部分について別メソッドで記載していた部分についてです。
セルの値は単純にそのまま持ってこれるようではないようです。
前回のメソッドをそのまま抜粋。

“`SamplePOI.java
private static String getCellStringValue(Cell cell) {
String retStr;
CellType cellType = cell.getCellType();
switch (cellType) {
case STRING:
retStr = cell.getStringCellValue();
break;
case NUMERIC:
retStr = String.value

元記事を表示

java インストール編

今日はjavaの開発キットである
JDKのインストールについて書きます。

# JDKとは
Java Development Kitの略です。

javaはOracleによって提供されています。
よりビジネスに使われた方がoracle社としても都合がいいので
他の言語にとって変わられないよう
リリースから随分時がたった今でも頻繁に更新がされています。

# JDKのインストール確認

前提としてJDKのインストールがされてるか
verはどうなっているか確認します。

“`bash:ターミナル
java -version
“`

# JDKのインストール

こちらのリンクよりJDKの提供元であるOracle社のHPに行きます。

[oracle社](https://www.oracle.com/technetwork/java/javase/downloads/index.html)

そして画像中央のjavaのアイコンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0

元記事を表示

Androidアプリで端末の画像を取り込む

#はじめに
AndroidStudioのデフォルトだけで完結するアプリ作りにも飽きてきたので、OpenCVを使って画像を色々編集できるようにしてアプリの幅を広げてみる。
はじめに編集するための画像をデバイスから取り込む。

#環境
OpenCV 4.1.2
AndroidStudio 3.4.1

#画像を取り込む
[公式ドキュメント](https://developer.android.com/guide/topics/providers/document-provider?hl=ja)がこちら

まずは適当にベースとなるコードを書く。
いまだにGUIでレイアウト画面作るの慣れていないのでxmlで書いちゃう派です。

“`java:MainActivity.java
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity ex

元記事を表示

ABC093 C – Same Integers

3つの整数が与えられ、2つの手法に則って同じ数にするには何回の操作が必要かを求める問題。
模範解答の解説は読んでも理解できなかったため、自分なりの解法で解いた。
#解法
3つの数字を配列に入れ、ソートを昇順でかける。
例)4,8,5
Arrays.sortメソッドを使うと
4,5,8の順番に入れ替わる。
array[0]

元記事を表示

【中小企業のエージェントを選ぶ理由をフリーランスエンジニアに聞いてみた】

#こんにちは!:open_hands:

株式会社アイスタンダードの本橋です。:raised_hand:

今回はフリーランスエンジニアに有益な情報を提供させていただきます。

既に株式会社アイスタンダードの「at-engineer」
https://at-engineer.jp/
を利用している方は、

他のイケてるエンジニアの投稿を見て知識を蓄えてください。:pray:

##一般の考え

初めてフリーランスになった方、フリーランス経験の浅い方は大手のエージェントを使いがちです。

もちろん、「長い物には巻かれろ」という言葉があるように、

大手のエージェントを使えば、安心します。:relaxed:

しかし、大手のエージェントは登録量が半端ないです。

そして、フリーランスエンジニアの方へ担当をつけるために

企業は多種多様な営業マン(新卒含め)を大量に採用します。

大体30-40人のフリーランスエンジニアに対してエージェント1人って感じですかね。
もっと多いかもしれないです。:frowning2:

###—こっから本題—:point_up:
##【中小企業のエージェ

元記事を表示

OTHERカテゴリの最新記事