JAVA関連のことを調べてみた2020年10月04日

JAVA関連のことを調べてみた2020年10月04日
目次

StreamAPIについてまとめてみた

## StreamAPIとは
> Stream APIは名前の通り、ストリーム(Stream)という流れてくるデータやイベントを処理するためのAPI群です。
> Java SE8で追加された
> StreamはListやMapなどのデータ集合をもとに生成し、0回以上の中間操作と、1回の終端操作を実行することで結果を得る。

## StreamAPIの使い方
ざっくりと概要を掴んだ上で実際にソースを見てstreamを使用した処理と使用していない処理を比べて見ます。
サンプルとしてListを加工して一件づつ処理を行うコードを記載します。
※ラムダ式については詳しく記載しません。詳しくはこちらの記事を参照してください
[Javaラムダ式についてまとめてみた](https://qiita.com/yqxxnaxr1109/items/4045a7925340088bd7e3)

“`java:streamなし
List integerList = Arrays.asList(1, 2, 3, 4, 5);
for (Integer i : integerList)

元記事を表示

Ruby と Python と Java で解く AtCoder ARC104 B 累積和

# はじめに
*[AtCoder Problems](https://kenkoooo.com/atcoder/#/)* の Recommendation を利用して、過去の問題を解いています。
AtCoder さん、AtCoder Problems さん、ありがとうございます。
# 今回のお題
*[AtCoder Regular Contest B – DNA Sequence](https://atcoder.jp/contests/arc104/tasks/arc104_b)*
Difficulty: 410

今回のテーマ、累積和

累積和問題ですが、今回は`A“C“G“T`の4個の累積和が必要になります
# Ruby
“`ruby.rb
n, s = gets.chomp.split
n = n.to_i
a = [0]
c = [0]
g = [0]
t = [0]
n.times do |i|
a << a[-1] c << c[-1] g << g[-1] t << t[-1] if s[

元記事を表示

IndexOutOfBoundsExceptionとArrayIndexOutOfBoundsExceptionの違いについて

#IndexOutOfBoundsExceptionの違いについて

[IndexOutOfBoundsException](https://docs.oracle.com/javase/jp/7/api/java/lang/IndexOutOfBoundsException.html)

> ある種のインデックス (配列、文字列、ベクトルなど) が範囲外であることを示すためにスローされます。

**List, ArrayList**などに対して、不正なインデックスを使ってアクセスした時に発生する例外

##※ArrayListの特徴
**初期化**

“`java
import java.util.ArrayList; //パッケージのインポートが必要
import java.util.List;

ArrayList <参照型> list名 = new ArrayList<>();
List <参照型> list名 = new ArrayList<>(); 
//ArrayListが実装しているList型のインターフェースで宣言することも可能
“`

– オブジェクトであれば*

元記事を表示

【Java】StackOverflowErrorとOutOfMemoryErrorの違い

Java Silverの勉強をするにあたり調べたことのメモ。

#StackOverflowErrorとOutOfMemoryErrorの違いは何か?

##StackOverflowErrorとは
[クラス StackOverflowError](https://docs.oracle.com/javase/jp/7/api/java/lang/StackOverflowError.html)
**スタック領域**でメモリがなくなることで発生するエラー

【発生する状況例】
メソッド内で**再帰呼び出し**を行う

【スタック領域とは】
**ローカル変数やメソッドの情報**を格納するメモリ領域のこと。
名前の通り、スタック状のデータ構造(後入れ先出し方式)を持つ。

メソッド内で自分自身のメソッドを呼び出し続けてしまうと、スタック領域にメソッドの情報が積み上がっていきパンクしてしまう。そうすると、JVM(Java Virtual Machine)がスタック領域が足りなくなったことを検知して、StackOverflowErrorを発生させる

##OutOfMemoryErrorとは

元記事を表示

JavaとRuby 比較してみた。

#【JavaとRuby 比較してみた。】

業務での開発言語は、Javaを使用しています。
業務外では、Rubyでポートフォリオ作成をしています。
対照的な特徴をもつ2つの言語を比較してみました。

##前提知識として。

コンピュータは、「0」,「1」の二進数で表された機械語しか理解できない。
プログラミング言語は、コンピュータが理解できるように人間が機械語を生成するためのもの。

全てのプログラムコードは、最終的に機械語に翻訳されている。
翻訳の役割を担うものには、「コンパイラ」,「インタプリタ」などがある。

※コンパイラとは、ソースコードを機械語に翻訳するツール

##Javaの特徴

###・コンパイラ型言語 (一括翻訳型)
一度にすべてのコードを機械語に翻訳してから実行する。

プログラミング言語で書かれたソースファイルを、一旦全て機械語に翻訳してクラスファイルを生成する。
JVM(Java Virtual Machine)が一括で実行する。

コンピュータが処理を実行する時にコンパイルを行う必要がない。
一度に、全てのソースコードを機械

元記事を表示

Visual Studio CodeでJavaを開発環境を設定した記録

Java Silverを勉強するにあたり、実際の開発環境に近い状態でJavaを動かしてみたいと思い、VSCodeとiTermからJavaのコードを動かせるように環境設定しました。

ローカル環境を使わずにJavaを動かす際は、[dokojava](https://dokojava.jp/sources/Main.java)というサイトを使っていました。『スッキリわかるJava入門』という本でおすすめされていたサイトです。

#この記事を参考にする場合の注意
[Visual Studio CodeでJavaの(デバッグできる)開発環境をつくる](https://codeaid.jp/vscode-debug/)というサイトを参考に、Visual Stdio Codeに「Java Extension Pack」をインストールして開発環境を設定したのですが、使いこなせず、結局OpenJDKをインストールすることで、ローカルでJavaを動かすことができるようになりました。

ただ、Visual Stdio Codeに「Java Extension Pack」をインストールする過程はどのみち必要

元記事を表示

[Java]Object型のnullをString型に変換

##[Java]Object型のnullをString型に変換

Object型で取得した値をString型に変換する必要があって
toString()、String.valueOf()、キャスト変換などなど
変換する方法はいくつかあるけど違いあるのかな?となり、
そして一番気になったのは取得したObject型の値がnullの場合、
エラー起きちゃったりしないかなーって思って調べてみた。
先に結果を先に載せると…

#####【Object型のnullをtoString(),String.valueOf(),キャスト変換で変換】
|toString()|String.valueOf()|キャスト変換|
|:—–:|:—–:|:—–:|
|NullPointerException|文字列”null”|null|

下記プログラムで確認してみると、

“`java:test.java
public static void main(String[] args) {
Object testNull = null; // Object型null作成
String

元記事を表示

JPAで変更不可能コレクションを削除すれば当然UnsupportedOperationExceptionになる

通常は“`UnsupportedOperationException“`を目にすることはほとんど無い。変更不可能なコレクションに対してうっかり“`add“`や“`remove“`をした場合、な程度と思われる。

なのだが、JPAで“`UnsupportedOperationException“`に遭遇してしばらくハマったのでメモを残しておく。

やりたい事としては、1:Nのエンティティを永続化したあと、そのエンティティに対して子コレクションを削除する、というもの。

“`java
@Transactional
@Override
public void run(String… args) throws Exception {
Parent parent = new Parent(5L, “name”, List.of(
new Child(new ChildId(101L, 1L), “aaa”, null),
new Child(new ChildId(102L, 1L), “bbb”, null)
));
em.persi

元記事を表示

対象の文字コードにない文字を書き込む際の挙動がFiles.writeとFiles.writeStringで異なる

?という漢字はユニコードのサロゲートペアの代表例としてプログラマにはよく知られていますが、この漢字はShift_JISには収録されていません。

“`java
Files.write(Paths.get(“sjis.txt”), List.of(“?”), Charset.forName(“SJIS”));
“`

上のコードは`Files.write`を使って、この?という漢字を文字コード=Shift_JISのファイルに書き込もうとするものですが、これを実行すると`UnmappableCharacterException`が発生します。

“`
Exception in thread “main” java.nio.charset.UnmappableCharacterException: Input length = 2
at java.base/java.nio.charset.CoderResult.throwException(CoderResult.java:275)
at java.base/sun.nio.cs.StreamEncoder.implWrite(

元記事を表示

Java + Apache Batik で SVG を編集して PNG や JPEG に変換する

## 概要

– Java + Apache Batik で SVG を編集して PNG や JPEG に変換して出力する
– 環境: Apache Batik 1.13 + Java 15 (AdoptOpenJDK 15+36) + Gradle 6.6.1

## サンプルコード

### build.gradle

Gradle で実行するように記述する。使用するライブラリを記載する。

“`groovy
plugins {
id ‘java’
id ‘application’
}

repositories {
mavenCentral()
}

dependencies {
// SVG を他のフォーマットに変換するための Apache Batik のコアモジュール
implementation ‘org.apache.xmlgraphics:batik-transcoder:1.13’

// PNG や JPEG の出力に必要なモジュール
runtimeOnly ‘org.apache.xmlgraphics:batik-codec:1.1

元記事を表示

JSP + ZXing で Web サイトに QRCode を表示してみる簡単なサンプル

JSP サイトを管理している知り合いが「QRCode を表示したい」と言っていたので、週末にちょっと試してみました。

Java だと OSS (Apache License 2.0) の [ZXing](https://github.com/zxing/zxing) がよく使われているみたいなので、JSP Web サイトに組み込んだメモとなります。

# 実際の Web 画面

以下のような入力画面で QRCode に指定したいURLを入力して「Submit」すると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/4bda5e20-b3b5-b1d1-5933-5930239b7997.png)
以下のように URL を QRCode に変換して表示します。「Back」で元ページに戻ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/87abe81a-514

元記事を表示

【おそらく一番簡単】Apache Tomcat + Java ServletでWEBアプリケーション開発

# 概要
JavaでWEBアプリケーション開発を行おうとした時に、色々と調べてみると、
JavaEEやSpring Bootを用いたWEBアプリケーション開発の記事が大量に出てくると思います。
(※おそらく今のトレンド的にも、当たり前の話なんでしょうが。)

上記技術やMaven(やGradle)を、組み合わせて自動デプロイを
やってみようと思う人も多いと思います。

ただ、いざ上記を組み合わせて、開発環境を構築しようと試みてみると、
思わぬ所でエラーが大量に発生したり、
サーバ起動しているのに「404 Not Found」のレスポンスステータスが返ってきたりと、
逆にハマるポイントが多々出てくるかと思います。

なので、まずは、純粋な「Apache Tomcat」と「Java Servlet」を使っての
WEBアプリケーション開発を行って、画面の表示を行うことを考えました。

JavaEEやSpring Bootの使用や、Mavenを使ってみるとかなんて、その後拡張すれば良いのです。

# 開発環境
・Eclipse IDE for Enterprise Java Developer

元記事を表示

JavaでTODOアプリを制作しよう10 例外処理の簡単なまとめ

こんにちは。

Java+Springで作るTODOアプリですが正常処理が完了したので次は例外処理について解説していきます。

## TODOアプリ作成リンク集
[1: [超基礎の理解] MVCの簡単な説明](https://qiita.com/nomad_kartman/items/bce2f4831b7b769f84f2)
[2: [雛形を用意する] Spring Initializrで雛形を作ってHello worldしたい](https://qiita.com/nomad_kartman/items/e173ea95b3ead96a412a)
[3: [MySQLとの接続・設定・データの表示] MySQLに仮のデータを保存 -> 全取得 -> topに表示する](https://qiita.com/nomad_kartman/items/f5f13037f048eeecf492)
[4: [POST機能] 投稿機能の実装] (https://qiita.com/nomad_kartman/items/113cdfc3c5cd1f5c0cef)
[5: [PATCH機能] TOD

元記事を表示

Ubuntu 16.04 ベースの Docker で java をインストールする

# Ubuntu 16.04 ベースの Docker で java をインストールする

## JDK 8 をインストールする

以下の Dockerfile を作ってビルドする。

“`
FROM ubuntu:16.04
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update -y \
&& apt-get install -y software-properties-common \
&& add-apt-repository ppa:openjdk-r/ppa \
&& apt-get install -y openjdk-8-jdk \
&& rm -rf /var/lib/apt/lists/*

# java
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64
“`

## JDK 8 をインストールする (apt でミラーサイトを利用)

[コマンドラインで ubuntu の apt の取得先をミラーに変更する (take2)](https://qii

元記事を表示

Java/Scala開発者が、データエンジニアとしてキャリアアップする道。

# キャリアアップの王道、ジョブチェンジ
仕事のやりがいや待遇をアップするキャリアデアップの王道のひとつは、ジョブチェンジである、と私は思う。ドラクエなどのRPGで、戦士が魔法戦士にチェンジして経験値やゴールドがより稼げるようになるが如くに。以下、龍(にジョブチェンジする)が如くに華々しい話では全くないのだけれど、特に(元請・下請含む)SIer界隈のJava屋さん向けの現実的なジョブチェンジの一例な軽いお話。

# 私の10年間(ポエム)
 10年ちょい前、SIer業界でお客様のためにJavaやScalaやPerl/Rubyを書いて食べていた私。今もJavaやScalaやPythonを書いているのだが、その間にプログラマ(フリーランスエンジニア)から、データエンジニア(DE)へのジョブチェンジを経験した(よくある誤解だが、データサイエンティストに、ではない)。
 その間、エンジニアとして10年分歳をとってオッサンとなりコードを書く速度ははっきり言って落ちた私だが、手取りの方は時間単価換算で1.8倍ほど増えた。おそらくは今後10年も大差ない手取りになるかと。まぁ先のことは分かりませんが(

元記事を表示

並びの不明な2つの配列をできるだけすっきりと一致確認する(Java)

# 並びが不明な配列同士の一致確認って結構ある

 DBから取得した配列って、並びが定まらないことが良くあります。
 そんな配列の一致確認をできるだけ少ないコードで表現できないか考えてみました。
 すっきりやりたいんだから、以下のような状況のはず
#### Stream.sorted() でソートが可能な型であること
 Stringとか、Integerなど、単純な型なら `Stream.sorted()` でソートできますね。
 ただし、この限りではないです。
 また、Comparator を定義すれば問題ないです。
#### null が含まれていないことが検証済み
 NullPointerException でます。
#### 一致、不一致のみを得る
 ここは言わずもがな

# ソースコード
“`Java:Sample.java
public boolean isEqualsList(List a, List b){
return Arrays.equals(a.stream().sorted().toArray(), b.stream().sorted()

元記事を表示

Java Lambda の入出力型を試してみた〜Stream 編〜

Java Lambda の入出力の型には、いろんなパターンが使えます。

* Map 方式
* POJO 方式
* InputStream/OutputStream 方式

公式ドキュメントでは [ここ](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/java-handler.html#java-handler-types) に書かれています。

[POJO 編](https://qiita.com/kazfuku/items/095b4fb9c37638f57457) では、POJO クラスを使用して JSON を扱う方法を紹介しました。

最後に、InputStream/OutputStream を使った Stream 編です。

前回の POJO 編に手を加えて、Jackson を使って自前で Parse、Generate するコードになります。

“`Java
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.servic

元記事を表示

Java Lambda の入出力型を試してみた〜POJO 編〜

Java Lambda の入出力の型には、いろんなパターンが使えます。

* Map 方式
* POJO 方式
* InputStream/OutputStream 方式

公式ドキュメントでは [ここ](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/java-handler.html#java-handler-types) に書かれています。

[Map 編](https://qiita.com/kazfuku/items/6b2e9131eb5e6e175922) では、Map 型を使用して JSON を扱う方法を紹介しました。

Map 方式のコードをみてみると、Object 型から String/Integer/Long 型などへのキャストが多数現れます。

“`Java
public class MapFunction implements RequestHandler, Map> {
@Override
public Map

元記事を表示

Java Lambda の入出力型を試してみた〜Map 編〜

Java Lambda の入出力の型には、いろんなパターンが使えます。

* Map 方式
* POJO 方式
* InputStream/OutputStream 方式

公式ドキュメントでは [ここ](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/java-handler.html#java-handler-types) に書かれています。

まずは、Map 方式から。

Lambda 関数に渡す入力 JSON はこれです。

“`Json
{
“name”: “orange juice”,
“price”: 1000,
“releaseDate”: 1601606387939,
“rate”: 4.5,
“rawMaterial”: [“orange”, “fragrance”],
“size”: {
“height”: 10,
“width”: 20,
“depth”: 30
}
}
“`

以下のコードでは、この入

元記事を表示

【JUnit 5】Spring Bootでバリデーションのテストを書くよ!【パラメータ化テスト】

## はじめに

こんにちは!ゼロからJavaであそぶシリーズ第5弾です。
今回は、前回作ったバリデーションのテストクラスを製作します。

ネタバレすると、最初に失敗例があるタイプのQiita投稿です。さくっとパラメータ化テストの実例が見たい方は【◎良い例】まで飛んでください(笑)

前回までの記事はこちら↓

1. [macでSTSの環境構築](https://qiita.com/akane_kato/items/fff46dfa34f97f95dc88)
2. [Spring BootでHelloWorld](https://qiita.com/akane_kato/items/a59494b0260f0e648425)
3. [Spring Bootでエコーアプリケーション作成](https://qiita.com/akane_kato/items/125b87446a5fe56b4f50)
4. [Spring Bootでフォームバリデーション作成](https://qiita.com/akane_kato/items/c527ecb19b348c6be228)

### 前回

元記事を表示

OTHERカテゴリの最新記事