2021年4月 8日 (木)

『java』の『HashMap』の中身を『List』化したい…

『java』の『HashMap』は、とても便利だ。

重複しているデータから重複を消してまとめてくれる。

で、色々処理に使っていているが…

処理した、『HashMap』を『List』化したいなと思った…。

で、多分『List』化するとしたら…

こんな感じかも。

[test.java]-----------------------------
import java.util.HashMap;
import java.util.ArrayList;
import java.util.List;
class test {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<String, String>();
map.put("3", "test3");
map.put("1", "test1");
map.put("2", "test2");
map.put("4", "test4");
map.put("5", "test5");
System.out.println(map);
List<String> list = new ArrayList<String>();
for(String v : map.values()) {
list.add(v);
}
for(int i=0 ; i<list.size() ; i++) {
System.out.println(i + " : " + list.get(i));
}
}
}
[test.java]-----------------------------

実行結果
{1=test1, 2=test2, 3=test3, 4=test4, 5=test5}
0 : test1
1 : test2
2 : test3
3 : test4
4 : test5

でも、『key』も欲しいな…。

となると、こうなるかな?

[test.java]-----------------------------
import java.util.HashMap;
import java.util.ArrayList;
import java.util.List;
class test {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<String, String>();
map.put("3", "test3");
map.put("1", "test1");
map.put("2", "test2");
map.put("4", "test4");
map.put("5", "test5");
System.out.println(map);
List<String> k_list = new ArrayList<String>();
List<String> v_list = new ArrayList<String>();
for(String k : map.keySet()) {
k_list.add(k);
v_list.add(map.get(k));
}
for(int i=0 ; i<k_list.size() ; i++) {
String k = k_list.get(i);
String v = v_list.get(i);
System.out.println(i + " : " + k + " => " + v);
}
}
}
[test.java]-----------------------------

実行結果
{1=test1, 2=test2, 3=test3, 4=test4, 5=test5}
0 : 1 => test1
1 : 2 => test2
2 : 3 => test3
3 : 4 => test4
4 : 5 => test5

でも、もっと直接的に参照できないだろうか?

で、調べたら…

面倒だけどあったので、メモです。

[test.java]-----------------------------
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.ArrayList;
import java.util.List;
class test {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<String, String>();
map.put("3", "test3");
map.put("1", "test1");
map.put("2", "test2");
map.put("4", "test4");
map.put("5", "test5");
System.out.println(map);
List<Entry<String, String>> list = new ArrayList<Entry<String, String>>(map.entrySet());
for(int i=0 ; i<list.size() ; i++) {
Entry<String, String> entry = list.get(i);
String k = entry.getKey();
String v = entry.getValue();
System.out.println(i + " : " + k + " => " + v);
}
}
}
[test.java]-----------------------------

実行結果
{1=test1, 2=test2, 3=test3, 4=test4, 5=test5}
0 : 1 => test1
1 : 2 => test2
2 : 3 => test3
3 : 4 => test4
4 : 5 => test5

この肝は、『Map.Entry』だろう。

実は、『Map』を書略していたが…

import java.util.Map;

をすると、こう書ける。

Map<String, String> map = new HashMap<String, String>();

多分主流なんだろうな。

兎も角、目的は、達成したので満足♪

因みに『new Entry<String, String>()』は、使えない…。

したらエラーが発生する。

>エラー: Entryはabstractです。インスタンスを生成することはできません

『abstract(抽象)』って何じゃそりゃ!

まあ、『Entry』を自作して対応する方法も見つけたけど…

そこまでやるのは、チョット違うかな?((笑))

| | コメント (0)

2016年5月 8日 (日)

『java』の『poi』から、表計算ソフトのプログラム構造が見えて来た…。

『Excel』などの、表計算ソフトのプログラムなど
考えたことも無かったが…

『poi』のプログラムを見ると、
そのデータアクセスから、データの構造が見えてきた…。

最初、セルがドーンと表示されているので
全てのセルに実態があるなんて、漠然と思っていた。

まあ、表計算ソフトでも作ったら別なんだろうけど
作った事ないので…。(汗)

でも、そう考えると、物凄くメモリーを使用する事になる。

セルの数が、16,384桁で65,535行だと考えると、
1セル1バイトだと考えただけで
67,108,864バイト…。

68MB…。

これは、メモリーが512KBや、4MBの
パソコンでは、使用できない。

まあ、DOSの頃だと、255x255が一杯かと思うが…。

ちなみに、セル数の16,384桁や65,535行の数値は、
10進数だと、キレが悪いと思われるが、
これが16進数だと、4000,FFFFと、キレが良い数値になる。

は、置いといて…。

見た目は、2次元に広がっているが
内部的には、データは、個別に作成されていると言う事。

簡単に『A1』に『a』と入力すると、内部に『A1/String/a』と
言ったデータが作られるようだ。

それらを編集する場合、『A』桁のデータを合算するのに
『=sum(A:A)』とか、入力する。

で、この時、バラバラなデータから『A』桁のデータを検索して
『double』だったら、加算集計すると言った処理だろう。

こうしてみると、データベースに近いかも…。

いや、表計算ソフトも面白い処理の塊だったと再認識。

『poi』に感謝♪

| | コメント (0) | トラックバック (0)

2016年5月 7日 (土)

『java』の『poi』で行を削除したい!

で、調べるとそんな機能が無いのが判明…。

行を削除するには、『removeRow』が紹介されるが

これは、指定行のデータを削除する機能で、

行を削除する機能ではない…。

とは言え、まあ、データを削除するので、間違いはないのだが…。

で、色々調べたら、『shiftRows』が使えるとの事。

で、小細工したらこんな感じで使えるようになった。

public void deleteRow(HSSFSheet sheet, int row) {
    int lastRow = sheet.getLastRowNum();
    sheet.shiftRows(row+1,lastRow,-1);
}

簡単に説明すると…

削除したい行を『row』で指定。

で、『row+1』行を『-1』で『row』に移動させるって処理。

この時、移動させる範囲を、
『sheet.getLastRowNum()』で取得する。

『sheet.getLastRowNum()』は、一番終わりにある
セルの行。

なので、結果的に『row』行は、削除される。

って感じ…。

こうして考えると、『poi』には、
機能が無いのでなく、必要な機能が揃っているので
あとは、組み合わせて実現しろって事なのかな。

頭の固い俺には、難しいです…。(汗)

| | コメント (0) | トラックバック (0)

2015年6月 8日 (月)

『Github』の使い方?

奇特な人から、『android』のドライバーのソースなどが
『Github』に掲載されているようだが、
どうやったら使えるのか知らない?

知らないが、調べてみよう。

と、回答して、既に一月…。(汗)

取り敢えず、アプリと思われるものをダウンロードしたのだが
どうも、ログインを要求される。

関連記事も読んだが、『Github』に参加しないと
使用できないよう?

しかも、ソースのアップも可能になる…。

しかし、参加で無く、ライブラリを利用したいだけなのだが…。

と思ったら、『ITmadia』が正にその事を記事にしていた。

「Google I/O」公式AndroidアプリのソースコードをGitHubで公開

この記事のリンクからソースリストが。

google/iosched

ソースをダウンロードするには、赤丸の所クリックすると
ソースをまとめて『ZIP』でダウンロードできる。

20150606001

そっから、どうやったら利用できるかは、
動作確認をできないので…。
別な記事を見てくれ!(汗)

『github.com/google/iosched』で検索すると
幾つか出て来る。

あと、ソースは、『Apache License』なので、
コピーライトを表示する以外、特に使用に制限が無いようだ。

しかし、個人的にな、こちらの方が気になるかも?

KLab、「ラブライブ!」のゲームエンジン「Playground」をオープンソース化

チョット見てみたが、コメントもちゃんとついていて
見易いように、インデントもちゃんとしている。

これを書いたプログラマーには、シンパシーを感じる!

| | コメント (1) | トラックバック (0)

2014年5月 5日 (月)

エラー画面のスクリーンセーバーを作ってみた♪

ある日、トレイから戻ってきたら
エラー画面が出ていた…。

それを見た奴が、「スクリーンセーバーかと思った」と言ったので…

では、そんなスクリーンセーバーを作ってみよう!

って訳で作ってみました…。(笑)

20140426001

まんまだと、リアルそのものなので、
『※なお、この画面は、冗談スクリーンセーバーの画面です。
決してエラー画面ではありません!』
との一文を入れてあります。

「ScreenSarver-ErrorScreen.scr.zip」をダウンロード

でも…

自分的には、使い場所が無い!

まあ、気に入った人がいたら使ってみてください。
ソースは、こちら。

「ScreenSarver-ErrorScreen.zip」をダウンロード

環境は、『Windows8 Pro』と
『Microsoft Visual C++ 2010 Express』です。

まあ、参考になればどうぞ。

| | コメント (0) | トラックバック (0)

2013年11月 5日 (火)

『EXCEL』の『VBA』で使用可能なデバイス名を求めるには…

チョットVBAで印刷を行うことに…

『PrintOut』を使えば、良いのだが
途中、プリントアウト先を変更したい。

この時に問題になるのが、変更する出力先。

変更先の名前は、事前に知っていなければならないのだが…
簡単に調べる方法が無い…。

しかも、名前を間違えるとエラーが発生するし…
どうやって調べれば…。

『コントロールパネル』の『デバイスとプリンター』で見てみる。

表示されている順番は、名前順にソートされて表示されているので
VBAでの番号と異なる。

VBAで使用するのは、OSへのデバイスの登録順らしい。

で、散々調べてみたら…
こんなやり方に落ち着いた。

'---------------------------------------
' 使用可能なデバイス名を列挙する
Private Sub DeviceListGet_Click()

    Dim printer_object As Object
    Dim io_no As Integer
    Dim row As Integer

    ' セルのクリア
    Range("A1:A10").value = Null

    ' リストの作成
    io_no = 0
    row = 36
    For Each printer_object In
        GetObject("winmgmts:").InstancesOf("Win32_Printer")
        Cells(row + io_no, 2) = printer_object.name & " on Ne0" & io_no & ":
        io_no = io_no + 1
        If io_no >= 10 Then
            MsgBox ("デバイス数が10を超えました、表示されないデバイスがあ _
            ります。目的のデバイスがリストに表示されていない場合、使用しないデバイスを削 _
            除して再度検索してください。")
            Exit For
        End If
    Next

End Sub
'---------------------------------------

正直、そのものずばりがあるかと思ったが…
もしかしたら見つけてないだけかも…。

取り敢えずは、これで良しとしよう!

| | コメント (0) | トラックバック (0)

2012年8月11日 (土)

『javascript』で『form』の変数を変更する方法

『form』の外で、『form』の値を変更したいのだが、
やり方が分からない。

玄人さんには、当たり前過ぎるのか、ネットを調べても
サックと見つけられないので、やり方が分かったので
備忘録として書いておく。

【test.jps】
...
function test(PARAM) {
    document.forms["form"].elements["action"].value=PARAM;
    document.forms["form"].action = "mode";
    document.forms["form"].submit();
}
...
<form action="test" method="post" name="form">    <<<<<<<<<<<<<<<< 「action」は、設定しなくても構わない
<input type="hidden" name="action" value="test">    <<<<<<<<<<<<<<<< 仕込み(「value」は、設定しなくても構わない)
...
<input type="button" value="モード1" onclick="test('mode1')" />
<input type="button" value="モード2" onclick="test('mode2')" />
</form>
...
【mode.java】
...
String    action = httpServletRequest.getParameter("action");
if(action.equals(mode1)) {
...mode1...
} else
if(action.equals(mode1)) {
...mode2...
} else {
...other...
}
...

もしかして「document.forms["form"].elements["action"].value」って
とっても便利なんでは…。

と、いまさら気がついた…。

※初心者なので間違えていたらご指摘くださいれ。

| | コメント (0) | トラックバック (0)

2012年7月13日 (金)

「input」で飛び先を変更する方法

「input」で飛び先を操作するのに苦労している。
色々調べてみたら、こうすれば良いらしい。

function next() {
    document.getElementById("form").action="next";
    document.getElementById("form").submit();
}

    ...

    <form method="post" id="form">
    <input type="button" value="sample button" onclick="next();" />
    </form>

    ...

更に発展させて、「input」にまとめて対応することができた。

    <form method="post" id="forms">
    <input type="submit" value="sample 3" onclick="getElementById('forms').action='next';" />
    </form>

ここまで来るのに…。(T_T)

ちなみに「next.java」を呼び出す場合の処理。

<%@ page contentType="text/html; charset=utf-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<title>sample</title>
<script type="text/javascript">
<!--
function next() {
    document.getElementById("form").action="next";
    document.getElementById("form").submit();
    // ※「form」の外の場合「document.」が必須
    // ※「form」の内の場合「document.」が省略可
}
-->
</script>
</head>

<body>
    <!--
    sample 1 通常のジャンプ
    「form」に「action」で起動ファイルを組み込んだ場合
    -->
    <form action="next" method="post">
    <input type="submit" value="sample 1" />
    </form>
    <!--
    sample 2 外部に処理を出した場合
    -->
    <form method="post" id="form">
    <input type="button" value="sample 2" onclick="next();" />
    </form>
    <!--
    sample 2 1行にまとめた場合
    // ※「input」の内に「form」は、仕様不可
    -->
    <form method="post" id="forms">
    <input type="submit" value="sample 3" onclick="getElementById('forms').action='next';" />
    </form>

</body>

</html>

忘れないように記載しておこう。

久しぶりにプログラムネタを書けたよ…。(^_^;)

| | コメント (0) | トラックバック (0)

2012年3月14日 (水)

今更買ったよ!『パーフェクトJAVA』

ネットの入門サイトを読めば、何とかなるかと思ったが…
ヤッパ買いました♪(汗)

パーフェクトJAVA

20111023001

個人的には、ちょっとパーフェクトは言い過ぎかも…。(汗)

とは言え、字引的につかっていて、まだ全部に目を通していない…。

最近、技術書を漁っています…。

| | コメント (0) | トラックバック (0)

2012年3月12日 (月)

今流行りのキネクト関連の本を買ってみた。

タイトル通り、買ってみた。

キネクトハッカーズマニュアル
KINECTセンサー画像処理プログラミング

20111001001

「ハッカーズ」は、画像が多数載っているので見やすい。
また、3Dセンサーの仕組みなどの解説は興味深い。
取り敢えず、「ハッカーズ」は、お勧め。(笑)

でも、キネクトは持っていない…。(T_T)

XBOXを買うか?
何て考えたいたら、これが発表された。

Kinect for Windows、日本でも発売

>日本マイクロソフトは2月2日、「Kinect for Windows」の出荷を始めた。直販サイトの価格は2万4800円。

いずれは、買う予定!

つまり、まだ買ってない…。(T_T)

| | コメント (0) | トラックバック (0)

より以前の記事一覧